PowerShell ParameterSets无法识别

时间:2012-01-25 21:23:55

标签: powershell parameters

我有一个powershell cmdlet,我似乎无法让参数集工作。 此cmdlet有31个可能的参数,它可以沿着两个可能的处理路径运行。 所有31个参数都是可选的,18个对于两个路径是共同的,9个对于“右”路径是唯一的,4个对于“左”路径是唯一的。我想要完成的是使用powershell的ParameterSet属性来指定何时可以使用哪个参数。但它不起作用。

以下是我的尝试模型。名称已被更改以保护无辜者。

[Parameter]
public string SomeString1 { get; set; }

[Parameter]
public string SomeString2 { get; set; }

[Parameter(ParameterSetName = "left")]
public string LeftName { get; set; }

[Parameter(ParameterSetName = "left")]
public string LeftDomain { get; set; }

[Parameter(ParameterSetName = "right")]
public string RightID { get; set; }

[Parameter(ParameterSetName = "right")]
public string RightIP { get; set; }

所以当我运行这个时,我尝试使用get-help检查我的参数列表,而我所看到的只是一大块参数,它应该将它们分成两个列表,一个包括两个“左”参数加上两个未命名的,另一个包括“正确”参数加上未命名的参数。

热闹的部分是我们有另一个cmdlet让我做到这一点很好,没有问题,完美的输出。但由于某种原因,这个人不让我。相同的包含,相同的语法,只是不同的名称。所以我知道我们的设置是正确的,因为它有时会起作用。但它并不是一直都有效,所以我很难过。

我已经尝试将部分/全部参数更改为Mandatory,我尝试在标题处使用DefaultParameterSetName。我已经尝试过加倍设置,比如包括一个名为“both”的集合,并使每个参数都成为该集合的一部分。我已经阅读了有关参数集的MSDN文章,我已经阅读了google返回的前40篇文章,但我无法让它发挥作用。我的团队中有一半站在我的办公桌后面,看着我这样做,而且他们都很难过。

我该怎么做:

  • 弄清楚为什么它没有识别我的参数集
  • 使它成为
  • 防止将来发生这种情况

1 个答案:

答案 0 :(得分:0)

Keith Hill,感谢提示 - 我尝试评论除了最小参数之外的所有参数,我注意到当我在cmdlet上运行get-help时,仍然返回了所有参数 。我知道发生了一些愚蠢的事情,事实证明,在编译cmdlet时,帮助文件没有得到更新。

当我解决这个问题时,似乎所有内容都按照我的预期运行,这就是get-help使用旧信息。这就是为什么其他人也无法弄清楚的原因。我做得对,所以没有错误,只有糟糕的文档。

主要的facepalm时刻,但我得到了解决。教训是:始终确保您的帮助自动生成。