【问题标题】:How to mark a switch parameter as mandatory in Powershell如何在 Powershell 中将开关参数标记为必填项
【发布时间】:2011-08-29 19:58:47
【问题描述】:

我很确定除了我所发现的之外我没有其他选择,但我想选择集体互联网大脑。

在将布尔值传递给自定义函数时,我更喜欢使用 [switch] 参数。但是,在某些情况下,我想将 switch 参数标记为必需的。这可以选择通过参数上的 [parameter(Mandatory = $true)] 来完成。但是,我真的不喜欢出现的 UI 提示。我更喜欢抛出异常。

但是,开关可以是真或假,“IsPresent”属性没有区别。如果我将开关参数传递为 -example:$false,则开关会报告 $example.IsPresent 为 false

我已经使用 [bool]。例如:

param
(
   [bool]$theValue = $(throw('You didn't specify the value!'))
);

我还有什么其他的技巧吗?

【问题讨论】:

  • 为什么没有两个开关? exampleexampleOff。然后,当IsPresent 都没有抛出错误时。

标签: powershell parameters switch-statement


【解决方案1】:

在某种程度上,switch 参数始终是必需的。如果您不指定它,它的值为 false。如果你指定它(-var),它会得到一个值 true,如果你也指定这个值(-var:$false),它会得到指定的值。

我真的想不出强制指定开关的情况。如果不指定,则为假。就这么简单。

我想你想要的是特别提到参数的值是真还是假?如果是这样的话,你提到的bool 版本就是我想要的,尽管它与switch 的工作方式相同:

param([switch]$a  = $(throw "You didn't specify the value"))

还有关于$example.IsPresent - 我知道它不直观 /broken ,但它与 switch 变量本身的值相同。这就是Switch Paramater 的构造函数的定义方式,它拥有的唯一属性是IsPresent

创建一个包含布尔值的新 SwitchParameter 对象 标识开关是否存在。

http://msdn.microsoft.com/en-us/library/system.management.automation.switchparameter.ctor%28v=vs.85%29.aspx

【讨论】:

  • 如果异常消息是困扰您的问题,那么这是您将得到的最好结果。
  • 糟糕!我错误地得出结论,在参数列表中使用“Switch”时抛出错误是行不通的。我又试了一次,似乎很好。 manojlds 的回答既准确又非常详细。
  • -var:$false 是我想要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 2020-05-11
  • 2021-09-04
相关资源
最近更新 更多