我怎么知道省略了PowerShell函数参数

时间:2009-04-07 22:57:14

标签: function powershell arguments

考虑这样的功能:

function Test($foo, $bar)
{
  ...
}

我们可以称之为:

Test -foo $null
Test

如何知道-foo何时被省略,何时为$ null?

3 个答案:

答案 0 :(得分:4)

如果您使用的是Powershell V2或更高版本,则可以使用$ PSBoundParameters变量,该变量是列出当前范围内所有绑定参数的字典。

请参阅讨论它的this 博文。

答案 1 :(得分:1)

除非可以捕获从param语句抛出的异常(并且因为param必须是第一个,所以我看不到这会起作用):

function {
  trap { "Something failed" }
  param($foo = $(throw "Foo not specified"))
  ...

然后我看不到一种方法(你用[switch]参数得到同样的东西:默认或明确地-mySwitch:$false)。

答案 2 :(得分:1)

基于理查德的想法的解决方案:

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

function Test($foo = $missed, $bar)
{
    if($foo -eq $missed) {
        Write-Host 'Missed'
    }
    else
    {
        Write-Host "Foo: $foo"
    }
}

Test -foo $null
Test