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

如何在Powershell中将开关参数标记为必需参数,powershell,parameters,switch-statement,Powershell,Parameters,Switch Statement,我很确定,除了我所发现的以外,我没有其他选择,但我想选择集体互联网大脑 在向自定义函数传递布尔值时,我更喜欢使用[switch]参数。但是,在一些情况下,我希望将switch参数标记为强制参数。这可以选择通过参数上的[参数(强制=$true)]实现。然而,我真的不喜欢出现的UI提示。我更喜欢抛出异常 但是,开关可以是true或false,“IsPresent”属性没有区别。如果我将开关参数传递为-example:$false,开关将报告$example.IsPresent为false 我求助于使

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

在向自定义函数传递布尔值时,我更喜欢使用[switch]参数。但是,在一些情况下,我希望将switch参数标记为强制参数。这可以选择通过参数上的[参数(强制=$true)]实现。然而,我真的不喜欢出现的UI提示。我更喜欢抛出异常

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

我求助于使用[bool]。例如:

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

我还可以玩其他把戏吗?

在某种程度上,
开关
参数始终是必需的。如果不指定它,它将得到一个值false。如果您指定它(
-var
),它将获得一个值true,如果您也指定该值(
-var:$false
),它将获得指定的值

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

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

param([switch]$a  = $(throw "You didn't specify the value"))
还有关于
$example.IsPresent
-我知道这不是直观的/错误的,但它与开关变量本身的值相同。这就是
开关参数
的构造函数的定义方式,它唯一的属性是
IsPresent

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


如果异常消息是困扰您的问题,那么这是您将得到的最好消息。哎呀!我错误地得出结论,在参数列表中使用“开关”时抛出错误将不起作用。我又试了一次,看起来很好。manojlds的回答既准确又详细。-var:$false是我要找的。谢谢为什么没有两个开关<代码>示例
示例关闭
。然后,当两个
都不显示时,抛出一个错误。