1

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

  1. 当用户不提供任何参数(因为它们都不是强制性的)时,它会抛出错误 Parameter set cannot be resolve using the specified named parameter
  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()
        {

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

4

1 回答 1

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

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

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

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

于 2012-06-22T06:01:33.117 回答