Рассмотрим такую функцию:Как я могу знать, что параметр функции PowerShell опущена
function Test($foo, $bar)
{
...
}
Мы можем назвать это:
Test -foo $null
Test
Как я могу знать, когда -foo был опущен, и когда его был $ null?
Рассмотрим такую функцию:Как я могу знать, что параметр функции PowerShell опущена
function Test($foo, $bar)
{
...
}
Мы можем назвать это:
Test -foo $null
Test
Как я могу знать, когда -foo был опущен, и когда его был $ null?
Если вы используете Powershell V2 или более поздней версии, вы можете использовать переменную $ PSBoundParameters которая является словарь, который содержит список всех связанных параметров в текущей области.
См. this Сообщение в блоге, которое обсуждает его.
Если это не возможно исключению ловушки выброшенного из паров заявления (и так пары должны быть первыми, я не могу видеть, что это будет работать):
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