Как определить параметр с необязательным значением? - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь создать функцию с параметром (Para2) типа string и назначенным значением ("ABC").Это значение следует использовать, когда вызывается только параметр.И если значение приходит с параметром, его следует использовать вместо этого.Но я не знаю, как это сделать.Я застрял, и мне нужна ваша помощь, пожалуйста.

Я играл с AllowEmptyString и различными ValidationSets, но не был успешно.Это то, что у меня пока есть:

Function MyFunction {

    [CmdletBinding (
        PositionalBinding = $false,
        DefaultParameterSetName = "MySet1"
    )]

    Param (

        [Parameter(ParameterSetName = "MySet1")]
        [string]$Para1 = "Para1 default",

        [Parameter(ParameterSetName = "MySet1")]
        [string]$Para2 = "ABC"

    )

    Write-Output $Para2

}

MyFunction -Para2 "xxx"

Вызов функции, такой как 'MyFunction -Para2 "xxx" ", повторяет" xxx "- это ожидаемо.Мне нравится находить способ вызывать такую ​​функцию, как «MyFunction -Para2», и я хочу видеть «ABC» как возвращаемое значение.

Есть идеи?

1 Ответ

0 голосов
/ 27 марта 2019

Вы можете делать то, что говорит TheIncorrigle1, но если входная переменная может быть пустой, вы также можете использовать следующее:

function MyFunction{
    [CmdletBinding(
        PositionalBinding = $false,
        DefaultParameterSetName = "MySet1"  
    )]
    param(
        [Parameter(ParameterSetName = "MySet1")]
        [string]$Para1 = "Para1 default",

        [Parameter(ParameterSetName = "MySet1")]
        [string]$Para2 = $para2
    )
    if(!$Para2){
        Write-Output "ABC"
    }else{
        Write-Output $Para2
    }
}

MyFunction -Para2 ""

Таким образом, если что-то ставится после -Para2, это будет вывод, и есливвод пустой или $ null выводит «ABC».

Также я немного отформатировал скрипт, чтобы сделать его более читабельным.Небольшой совет - это руководство по написанию сценариев PowerShell, которое всегда обеспечивает удобочитаемость и поддержку ваших сценариев.

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

Возможное решение для вашего вопроса из комментария:

try{
    MyFunction -Para2
}catch{
    MyFunction -Para2 ""
}
...