Можно ли заставить 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
или что-то еще?
Ответы
Ответ 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 будет использоваться как интерактивно, так и не интерактивно, а при интерактивном запуске вы хотите получить подсказку о отсутствующих параметрах.