提问者:小点点

C#binary PSCmdLet在使用某个其他参数时停用参数


我正在寻找如下解决方案,希望得到您的支持:

在我的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()
        {

        }
    }
}

我怎么能这么做呢?

感谢你的帮助!

克里斯


共1个答案

匿名用户

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

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

感谢您已经投入的时间!

克里斯