如何在Powershell中将switch参数标记为必需

Joh*_*man 8 parameters powershell switch-statement

我很确定除了我发现的东西之外我没有任何其他选择,但我想选择集体的互联网大脑.

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

但是,一个开关可以是true或false,而"IsPresent"属性没有区别.如果我将switch参数传递为-example:$ false,则交换机报告$ example.IsPresent为false!

我已经使用了[bool].例如:

param
(
   [bool]$theValue = $(throw('You didn't specify the value!'))
);
Run Code Online (Sandbox Code Playgroud)

我还有其他技巧吗?

man*_*lds 21

在某种程度上,switch参数始终是强制性的.如果未指定它,则其值为false.如果指定它(-var),则值为true,如果指定值too(-var:$false),则获取指定的值.

我真的不能想到必须指定一个开关的情况.如果您未指定,则为false.就那么简单.

我想你想要的是具体提到param的价值是真还是假?如果是这种情况,bool你提到的版本就是我想要的版本,尽管它的工作方式switch也是一样的:

param([switch]$a  = $(throw "You didn't specify the value"))
Run Code Online (Sandbox Code Playgroud)

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

创建一个新的SwitchParameter对象,该对象包含一个布尔值,用于标识交换机是否存在.

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