0

所以我正在尝试编写一个使用开关参数的脚本,并且我还需要参数来配合它们。例如,

Function Foo ($X, $Z, [switch]$Y, $Yarg, [switch]$K, $Karg){
  if($Y){
    $Yup = $Yarg
  }

  if($K){
    $Y = $Karg
  }Else{$Y = 42}

  $X + $Z / $Yup

}

本质上我想问一下开关是否在那里,如果它在那里,我希望它使用 $Yarg 变量,目前当我这样做时,我得到一个错误,说开关只能是一个布尔值。然后其余代码失败。有任何想法吗?

4

2 回答 2

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
)

我希望语法应该很明显。

于 2012-12-04T14:14:35.237 回答
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
)

这似乎更容易,而且有效!

于 2012-12-04T17:28:12.100 回答