我怎么能知道PowerShell的功能被忽略了

问题描述:

考虑这样的功能:我怎么能知道PowerShell的功能被忽略了

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

我们可以把它叫做:

Test -foo $null 
Test 

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

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

请参阅this博客文章,讨论它。

除非是可以从PARAM语句引发异常陷阱(既然PARAM必须是第一个,我看不出这会工作):

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

然后我看不到的方式(你可以用[switch]参数得到同样的结果:默认或明确-mySwitch:$false)。

根据理查德的想法的解决方案:

$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