将参数集添加到我的自定义C#cmdlet,不包含任何参数

时间:2012-02-03 22:18:33

标签: c# parameters powershell-v2.0 cmdlets

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

  1. 当用户没有给出任何参数时(因为它们都不是必需的)然后它会抛出错误参数集无法使用指定的命名参数解析
  2. 当用户给出第一个参数并输入 - 然后点击标签应该只显示第二个参数,因为第一个和第二个参数设置相同,但显示第二个和第三个不正确。同样,即使用户首先输入第3个参数,它也显示第1个和第2个。
  3. 以下是我如何定义参数的代码:

        [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()
            {
    

    任何人都可以告诉我,我错过了什么吗?应该为参数添加更多属性吗?

1 个答案:

答案 0 :(得分:1)

  1. 由于您只使用命名参数,因此您需要将其中一个标记为' DefaultParameterSet'例如

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

    或至少有一个参数不属于任何命名的ParameterSet。

  2. PS不会检查标签建议是否属于同一参数集。所以你这里没有做错任何事,就像PS的行为一样。