考虑这样的功能:
function Test($foo, $bar)
{
...
}
我们可以称之为:
Test -foo $null
Test
如何知道-foo何时被省略,何时为$ null?
答案 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