Вы можете сделать Темы опциональной и обработать требование в начале тела вашего скрипта, имитирующая обязательный параметр, следующий образом:
param(
[parameter(Mandatory=$true)][ValidateSet("Add","Delete")] [string]$Command,
[string] $Subject
)
if (($Command -eq 'Add') -and ($PSBoundParameters['Subject'] -eq $null)) {
$Subject = Read-Host 'Supply value for the parameter "Subject" (mandatory when the value of "Command" is "Add")'
}
Условия $PSBoundParameters['Subject'] -eq $null
имеет значение Истину, если параметр Тема не указана. Обратите внимание, что вы не можете просто использовать $Subject -eq $null
, потому что $ Subject инициализируется как пустая строка, если параметр опущен. Если вы не указали $ Subject (т. Е. Не укажете [string]
), тогда он будет пустым, если он опущен, но я полагаю, вы не хотите этого делать.
Обратите внимание, что этот будет позволит пользователю просто нажать [ENTER], когда будет предложено, в результате чего $ Subject пустой, но это стандартное поведение для обязательных параметров. Если вы не хотите этого допускать, вы можете сделать одно из следующих действий (это еще одно преимущество обработки сложных требований к параметрам, подобных этому в теле, а не объявлении параметра).
Throw ошибку:
param(
[parameter(Mandatory=$true)][ValidateSet("Add","Delete")] [string]$Command,
[string] $Subject
)
if (($Command -eq 'Add') -and ($PSBoundParameters['Subject'] -eq $null)) {
$Subject = Read-Host 'Supply value for the parameter "Subject" (mandatory when the value of "Command" is "Add"'
if (-not $Subject) {
throw "The Subject may not be blank."
}
}
Keep предлагающее до тех пор, пока обеспечивается значение:
param(
[parameter(Mandatory=$true)][ValidateSet("Add","Delete")] [string]$Command,
[string] $Subject
)
if (($Command -eq 'Add') -and ($PSBoundParameters['Subject'] -eq $null)) {
do {
$Subject = Read-Host 'Supply value for the parameter "Subject" (mandatory when the value of "Command" is "Add"'
if (-not $Subject) {
Write-Host -NoNewline "The Subject may not be blank. "
}
} until ($Subject)
}
Какой ответ не работал раньше? Где находится предыдущий вопрос? – EBGreen
http://stackoverflow.com/questions/13533763/powershell-mandatory-parameter-depend-on-other-parameter –