Простой прием, позволяющий приостановить выполнение PowerShell скрипта до нажатия пользователем любой клавиши или отменить его совсем.
Для примера создадим скрипт ask.ps1, содержащий вот такой текст:
Write-Host ″Press any key to continue … or Ctrl+C to abort″
$x = $host.UI.RawUI.ReadKey(″NoEcho,IncludeKeyDown″)
$a = ″Скрипт″
$b = ″успешно″
$c = ″выполнен !!!″
Write-Host
Write-Host $a $b $c
Write-Host
Ключевым моментом здесь является конструкция:
$x = $host.UI.RawUI.ReadKey(″NoEcho,IncludeKeyDown″)
В ней мы используем метод ReadKey свойства RawUI, являющееся свойством UI, которое в свою очередь является свойством переменной среды $host, хранящей текущий сеанс PowerShell. Для ReadKey мы указываем следующие параметры:
IncludeKeyDown — этот параметр обеспечивает продолжение работы скрипта в том случае, если будет нажата какая-либо клавиша. Как вариант, можно использовать параметр IncludeKeyUp, в этом случае работа скрипта продолжится только после того, как клавиша будет отпущена.
NoEcho — предотвращает вывод на экран лишней информации.
Обратите внимание, что результат выполнения ReadKey мы помещаем в переменную $x, что также помогает предотвратить появление на экране ненужной информации.
Запускаем скрипт, и получаем возможность либо продолжить выполнение при нажатии любой клавиши, либо отменить сочетанием клавиш Ctrl+C.
Важно. Данный трюк не работает в PowerShell ISE.
В приведенном примере у пользователя есть возможность отменить выполнение скрипта. Если вы не хотите предоставлять пользователю эту возможность, то надо добавить параметр AllowCtrlC:
$x = $host.UI.RawUI.ReadKey(″NoEcho,IncludeKeyDown,AllowCtrlC″)
В этом случае даже при нажатии клавиш Ctrl+C скрипт будет выполнен.
смысл понятен, красиво но в большинстве случаев опасно.
по старинке Read-Host для просто «press enter» или если что важное то так
$reply = Read-Host -Prompt «Continue?[y/n]»
if ( $reply -match «[yY]» ) {
}