Подтвердить что ты не робот

Можно ли заставить PowerShell script бросать, если нужный параметр опущен?

Мне бы хотелось, чтобы второй вызов функции в этом script выдал ошибку:

function Deploy
{

param(

    [Parameter(Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [string]$BuildName

    )
    Write-Host "Build name is: $BuildName"

}

Deploy "Build123"

Deploy #Currently prompts for input

Подсказка отлично подходит для использования script в интерактивном режиме, но это также будет выполнено нашим сервером сборки.

Лучше всего делать какую-то обычную проверку с помощью if или что-то еще?

4b9b3361

Ответ 1

Как только параметр будет отмечен как обязательный, PowerShell запросит значение. Тем не менее, если вы удалите обязательный атрибут, вы можете установить значение по умолчанию с помощью оператора throw:

function Deploy
{
    param(
        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [string]$BuildName=$(throw "BuildName is mandatory, please provide a value.")
    )

    Write-Host "Build name is: $BuildName"
}

Ответ 2

@Emperor XLII имеет приятный комментарий в вопросе, который, я думаю, может быть лучшим ответом для некоторых случаев использования:

если вы запустите powershell.exe с флагом -NonInteractive, обязательные параметры вызовут ошибку и приведут к ненулевому выходу кода для процесса.

Причины этого могут быть следующими:

  • У вас много таких параметров Mandatory=$true, и их стоимость высока, чтобы преобразовать их все.
  • script будет использоваться как интерактивно, так и не интерактивно, а при интерактивном запуске вы хотите получить подсказку о отсутствующих параметрах.