Как сделать "паузу" с PowerShell 2.0?
хорошо, я теряю его. PowerShell меня раздражает. Я бы хотел, чтобы появился диалог паузы, и он не будет.
PS W:>>> $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Exception calling "ReadKey" with "1" argument(s): "The method or operation is not implemented."
At line:1 char:23
+ $host.UI.RawUI.ReadKey <<<< ("NoEcho")
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
5 ответов:
cmd /c pause | out-null(Это не в PowerShell, но это гораздо более элегантно.)
сохранить деревья. Используйте однострочные.
Я думаю, что стоит резюмировать / обобщить выбор здесь для ясности... затем предложите новую вариацию, которая, как я считаю, обеспечивает лучшую полезность.
ReadKey (System.Консоль)
write-host "Press any key to continue..." [void][System.Console]::ReadKey($true)
- преимущество: принимает любую клавишу, но правильно исключает клавиши-модификаторы Shift, Alt, Ctrl.
- недостаток: не работает в PS-ISE.
ReadKey (RawUI)
Write-Host "Press any key to continue ..." $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
- недостаток: не работает в PS-ISE.
- недостаток: не исключает клавиши-модификаторы.
cmdRead-Host -Prompt "Press Enter to continue"cmd /c Pause | Out-Null
- недостаток: не работает в PS-ISE.
- недостаток: заметно запускает новую оболочку / окно при первом использовании; не заметно при последующем использовании, но все еще имеет накладные расходы
Read-Host
Read-Host -Prompt "Press Enter to continue"
- преимущество: работает в PS-ISE.
- недостаток: принимает только ввод ключ.
ReadKey composite
это составная часть выше с обходным путем ISE / kludge, извлеченным из предложения на технический блог Адама (любезно предоставлено ником из предыдущих комментариев на этой странице). Я сделал два небольших улучшения к последнему: добавлен тест-путь, чтобы избежать ошибки, если вы используете Set-StrictMode (ты ведь знаешь, не так ли?!) и окончательный Write-Host, чтобы добавить новую строку после нажатия клавиши, чтобы поместить приглашение справа место.
Function Pause ($Message = "Press any key to continue . . . ") { if ((Test-Path variable:psISE) -and $psISE) { $Shell = New-Object -ComObject "WScript.Shell" $Button = $Shell.Popup("Click OK to continue.", 0, "Script Paused", 0) } else { Write-Host -NoNewline $Message [void][System.Console]::ReadKey($true) Write-Host } }
- преимущество: принимает любую клавишу, но правильно исключает клавиши-модификаторы Shift, Alt, Ctrl.
- преимущество: работает в PS-ISE (хотя только с Enter или щелчком мыши)
- недостаток: не один-лайнер!
Я предполагаю, что вы хотите прочитать ввод с консоли. Если да, то используйте
Read-Host.
решения типа
cmd /c pauseсоздать новый командный интерпретатор для запуска в фоновом режиме. Хотя в некоторых случаях это приемлемо, это не совсем идеально.решения с использованием
Read-Hostзаставить пользователя нажать введите и на самом деле не "любой ключ".это решение даст вам истинный" нажмите любую клавишу, чтобы продолжить " интерфейс и не будет запускать новый интерпретатор, который будет по существу имитировать оригинал .
Write-Host "Press any key to continue..." [void][System.Console]::ReadKey($true)
кроме Michael Sorens' ответ:
ReadKey в новом процессе
Start-Process PowerShell {[void][System.Console]::ReadKey($true)} -wait
- преимущество: принимает любую клавишу, но правильно исключает Shift, Alt, Ctrl клавиша-модификатор.
- преимущество: работает в PS-ISE.
Comments