Powershell:包含参数的开关的函数

时间:2012-12-04 14:08:34

标签: function powershell windows-7 parameters

所以我正在尝试编写一个使用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变量,目前当我这样做时,我得到一个错误,说交换机只能是一个布尔值。然后剩下的代码失败了。有什么想法吗?

2 个答案:

答案 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
)

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