我正在寻找如下解决方案,希望得到您的支持:
在我的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。 其他的都不是。
感谢您已经投入的时间!
克里斯