如何省略调用函数的$ null参数?

时间:2009-04-07 23:46:13

标签: function powershell arguments

考虑这样的功能:

$missed = "{716C1AD7-0DA6-45e6-854E-4B466508EB96}"

function Test($foo = $missed, $bar = $missed)
{
  if(!$foo)
  {
    throw "error"
  }

  if(!$bar)
  {
    throw "error"
  }
}

我想以这种方式调用此函数

Test -foo $foo -bar $bar

但如果$ foo或$ bar为$ null,则会抛出异常。天真的解决方案是

if($foo -and $bar)
{
  Test -foo $foo -bar $bar
}
elseif ($foo)
{
  Test -foo $foo
}
elseif ($bar)
{
  Test -bar $bar
}
else
{
  Test
}

如何在一行/两行中重写这个if / else块?

4 个答案:

答案 0 :(得分:3)

由于您无法控制Test功能,因此您可以这样做:

$params = @()
if ($foo) {
    $params += "-Foo","`$foo"
}
if ($bar) {
    $params += "-Bar","`$bar"
}
Invoke-Expression "Test $params"

答案 1 :(得分:2)

function m ($x) {if ($x) {$x} else {$missed}}

Test -foo (m $foo) -bar (m $bar)

答案 2 :(得分:1)

您可以将函数编写为 -

if(!$ foo){$ foo = $ missing}
if(!$ bar){$ bar = $ missing}

答案 3 :(得分:1)

您可以使用“splatting”,如下所示:

$params = @{}
if ($foo) {$params['foo'] = $foo}
if ($bar) {$params['bar'] = $bar}
Test @params

它不会短得多,但这是一个非常有用的技巧。

相关问题