所以我正在尝试编写一个使用switch参数的脚本,我还需要参数来配合它们。例如,
Function Foo ($X, $Z, [switch]$Y, $Yarg, [switch]$K, $Karg){
if($Y){
$Yup = $Yarg
}
if($K){
$Y = $Karg
}Else{$Y = 42}
$X + $Z / $Yup
}
Essentialy我想问一下交换机是否存在,那么如果它在那里我希望它使用$ Yarg变量,目前当我这样做时,我得到一个错误,说交换机只能是一个布尔值。然后剩下的代码失败了。有什么想法吗?
答案 0 :(得分:2)
我的假设是Y和K是互斥的参数集,X和Z对于两者都是通用的,并且是强制性的。如果既未指定-Y也未指定-K,则默认值为-Y。为清楚起见,我在这里使用备用参数声明语法:
function Foo(
[cmdletbinding(defaultparametersetname="setY")]
param(
[parameter(mandatory=$true)]
$X,
[parameter(mandatory=$true)]
$Y
[parameter(parametersetname="setY")]
[switch]$Y,
[parameter(parametersetname="setY", mandatory=$true)]
$YArg,
[parameter(parametersetname="setK")]
[switch]$K,
[parameter(parametersetname="setK", mandatory=$true)]
$KArg,
)
# do work
)
我希望语法应该是显而易见的。
答案 1 :(得分:0)
所以我打算做的是创建一个函数,你可以输入像这样的变量
foo x z -y yarg -k karg
主要想要 -y yarg 类型变量条目。
为了能够做到这一点,我想我需要使用一个开关,但实际上我只需要不必要的参数。
function Foo(
[cmdletbinding(defaultparametersetname="setY")]
param(
[parameter(mandatory=$true, position=0)]
$X,
[parameter(mandatory=$true, position=1)]
$Z
[parameter(mandatory=$false)]
$Y,
[parameter(mandatory=$false)]
$K
)
# do work
)
这似乎更容易,而且有效!