Странное поведение PowerShell во время Invoke-Comand - PullRequest
0 голосов
/ 17 ноября 2018

Собирался сделать консольную проверку пользовательского ввода в моем скрипте, но встретил странное поведение 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. В чем проблема?

1 Ответ

0 голосов
/ 19 ноября 2018

Теперь понятно почему, но проблема в названии функции «prompt», если ее переименовали во что-то еще, все работает хорошо.

...