C# 二进制 PSCmdLet |如果使用某个其他参数,则停用参数

C# binary PSCmdLet | deactivate parameters if a certain other parameter is used

我正在寻找如下解决方案:

在我的 cmdlet 中,我使用了一些相互排斥的参数。如果我使用...

[Parameter(Position = 2, Mandatory = false, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "EXE")]
            [ValidateNotNullOrEmpty()]
            public string Arguments { get; set; }

其他参数

[Parameter(Position = 4, Mandatory = false, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "EXE")]
        public object[] ModifyUninstallString { get; set; }

用户不应再使用。并逆转。 我尝试了 ParameterSetName,但没有成功。使用动态参数,我只能将两个参数初始化一次。对其他参数的更改不起作用。 :-(

我的尝试:

namespace myNamespace
{
    public class NormalArgument
    {
        [Parameter(Position = 2, Mandatory = false, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "EXE")]
        [ValidateNotNullOrEmpty()]
        public string Arguments { get; set; }
    }

    public class ModifyArgument
    {
        [Parameter(Position = 4, Mandatory = false, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "EXE")]
        public object[] ModifyUninstallString { get; set; }
    }


    [Cmdlet(VerbsLifecycle.Uninstall, "Legacy")]
    [OutputType(typeof(UninstallLegacy))]
    public partial class UninstallLegacy : PSCmdlet, IDynamicParameters
    {
        private ModifyArgument modArgument = null;
        private NormalArgument normArgument = null;

        public object GetDynamicParameters()
        {
            if (modArgument == null)
            {
                modArgument = new ModifyArgument();
                return modArgument;
            }
            if (normArgument == null)
            {
                normArgument = new NormalArgument();
                return modArgument;
            }
            if (modArgument != null)
            {
                normArgument = null;
            }
            if (normArgument != null)
            {
                modArgument = null;
            }
            return null;
        }

        protected override void ProcessRecord()
        {

        }
    }
}

我该怎么做?

我找到了解决办法!我想的太复杂了!

只有互斥的参数才应该有不同的ParameterSetName。其他都不是。