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

时间:2011-08-29 19:58:47

标签: powershell parameters switch-statement

我很确定除了我发现的内容之外我没有其他任何选择,但我想选择集体网络大脑。

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

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

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

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

我还有其他技巧吗?

1 个答案:

答案 0 :(得分:20)

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

我无法想到必须指定一个开关的情况。如果您未指定,则为false。就这么简单。

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

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

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

  

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

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