Собирался сделать консольную проверку пользовательского ввода в моем скрипте, но встретил странное поведение PS, вот скрипт:
function Prompt
{
param([string] $prompt, $validationScript)
$rv = $null
do
{
try
{
$input = Read-Host -Prompt $prompt
$rv = Invoke-Command $validationScript -ArgumentList $input
} catch
{
Write-Host "Invalid input, try again"
}
} while (!$rv)
$rv
}
$xxx = Prompt -Prompt "Enter integer" -validationScript {[Convert]::ToInt32($args[0], 10)}
$xxx
Работает хорошо, когда вы вводите недопустимые значения, но при наличии действительного целого числа оно возвращает значение и PS зависает. Если я остановлю его в ISE, то появятся тысячи «Неверный ввод, попробуйте еще раз», просто похоже, что цикл никогда не заканчивается, но без вызова Read-Host. В чем проблема?