Необязательный строковый параметр (должен быть NULL)

Я пытаюсь ввести в свою функцию необязательный строковый параметр. На основании этого потока следует [AllowNull()] выполнить трюк, но PowerShell по-прежнему заполняет мой параметр пустой строкой (используя PowerShell версии 5.1.14393.206).

Следующая функция иллюстрирует проблему:

function Test-HowToManageOptionsStringParameters() {
    Param(
        [Parameter(Mandatory)]
        [int] $MandatoryParameter,
        [Parameter()]
        [AllowNull()]
        [string] $OptionalStringParameter = $null
    )

    if ($null -eq $OptionalStringParameter) {
        Write-Host -ForegroundColor Green 'This works as expected';
    } else {
        Write-Host -ForegroundColor Red 'Damit - Parameter should be NULL';
    }
}

Что еще хуже, даже этот код не работает (присвоение $null параметру для тестирования), я действительно не понимаю, почему это не работает…

function Test-HowToManageOptionsStringParameters() {
    Param(
        [Parameter(Mandatory)]
        [int] $MandatoryParameter,
        [Parameter()]
        [AllowNull()]
        [string] $OptionalStringParameter = $null
    )

    $OptionalStringParameter = $null;

    if ($null -eq $OptionalStringParameter) {
        Write-Host -ForegroundColor Green 'This works as expected';
    } else {
        Write-Host -ForegroundColor Red 'Damit - Parameter should be NULL';
    }
}

person thuld    schedule 18.11.2016    source источник


Ответы (2)


Похоже, что powershell назначает пустую строку вашему переменная, если вы назначите ее $null, если она объявлена ​​как [string].

Вы можете обойти это, опустив тип [string] на $OptionalStringParameter. Другой способ - проверить [string]::IsNullOrEmpty($OptionalStringParameter) в вашем операторе if.

person Martin Brandl    schedule 18.11.2016

Измените свой код на это:

function Test-HowToManageOptionsStringParameters() {
PARAM(
    [Parameter(Mandatory)]
    [int] $MandatoryParameter,
    [Parameter()]
    [AllowNull()]
    [string] $OptionalStringParameter
)

if(-not $OptionalStringParameter) {
    Write-Host -ForegroundColor Green 'This works as expected';
}
else {
    Write-Host -ForegroundColor Red 'Damit - Parameter should be NULL';
}
}

Используйте оператор ! или -not для проверки на нуль. Если вы думаете, что проблема в том, что у вас есть параметр typed -> вы найдете объяснение в комментариях к этому ответ.

надеюсь, это поможет

person Moerwald    schedule 18.11.2016