Как я могу узнать, что параметр функции PowerShell опущен - PullRequest
3 голосов
/ 08 апреля 2009

Рассмотрим такую ​​функцию:

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

Мы можем назвать это:

Test -foo $null
Test

Как я могу узнать, когда -foo был опущен и когда он был $ null?

Ответы [ 3 ]

4 голосов
/ 08 апреля 2009

Если вы используете Powershell V2 или новее, вы можете использовать переменную $ PSBoundParameters, которая является словарем, в котором перечислены все связанные параметры в текущей области.

См. это сообщение в блоге, где это обсуждается.

1 голос
/ 08 апреля 2009

Решение, основанное на идее Ричарда:

$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
1 голос
/ 08 апреля 2009

Если нет возможности отловить исключения, выданные из оператора param (а поскольку param должен быть первым, я не вижу, чтобы это работало):

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

Тогда я не вижу пути (вы получаете то же самое с параметрами [switch]: по умолчанию или явно -mySwitch:$false).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...