3

考虑这样的功能:

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

我们可以称之为:

Test -foo $null
Test

我怎么知道什么时候 -foo 被省略了,什么时候是 $null?

4

3 回答 3

4

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

请参阅讨论它的这篇博客文章。

于 2009-04-07T23:28:15.727 回答
1

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

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

然后我看不到方法(使用 [switch] 参数得到相同的结果:默认或显式-mySwitch:$false)。

于 2009-04-07T23:05:04.817 回答
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
于 2009-04-07T23:26:52.750 回答