【问题标题】:Adding parameter sets to my custom C# cmdlet with no parameter mandatory将参数集添加到我的自定义 C# cmdlet,没有强制参数
【发布时间】:2012-06-22 14:51:30
【问题描述】:

我开发了一个自定义 c# cmdlet。它有三个参数(都是字符串),没有一个是强制性的。其中两个属于parameterset1,第三个属于parameterset2。它工作正常,当用户从两个参数集中提供参数时,它会给出它们不属于同一参数集的消息。但是我遇到了两个问题:

  1. 当用户不提供任何参数(因为它们都不是强制性的)时,它会抛出错误参数集无法使用指定的命名参数解析
  2. 当用户给出第一个参数并键入 - 然后点击选项卡时,应该只显示第二个参数,因为第一个和第二个在相同的参数集中,但它显示的是第二个和第三个,这是不正确的。同样,即使用户先输入第 3 个参数,它也会显示第 1 和第 2。

这是我如何定义参数的代码:

    [System.Management.Automation.Cmdlet(System.Management.Automation.VerbsCommon.Get, "Customcmd")]
    public class Get_Customcmd: System.Management.Automation.PSCmdlet
    {
        [System.Management.Automation.Parameter(Mandatory = false, ParameterSetName = "Set1")]
        public string Param1;
        [System.Management.Automation.Parameter(Mandatory = false, ParameterSetName = "Set1")]
        public string Param2;
        [System.Management.Automation.Parameter(Mandatory = false, ParameterSetName = "Set2")]
        public string Param2;
        protected override void ProcessRecord()
        {

谁能告诉我我错过了什么?是否应该向参数添加更多属性?

【问题讨论】:

    标签: c# parameters powershell-2.0 powershell-cmdlet


    【解决方案1】:
    1. 由于您只使用命名参数,您需要将其中一个标记为“DefaultParameterSet”,例如

      [Cmdlet(VerbsCommon.New, "Customcmd", DefaultParameterSetName = Set1)]

      或至少有一个参数是不是任何命名参数集的一部分。

    2. PS 不检查选项卡建议是否属于同一参数集。所以你在这里没有做错任何事情,这就是 PS 的行为方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 2017-07-14
      • 1970-01-01
      • 2019-06-22
      相关资源
      最近更新 更多