Ответ 1
cmd /c pause | out-null
(Это не способ PowerShell, но он намного шире.)
Сохраните деревья. Используйте однострочные.
Хорошо, я теряю его. 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
cmd /c pause | out-null
(Это не способ PowerShell, но он намного шире.)
Сохраните деревья. Используйте однострочные.
Я думаю, что стоит наглядно продемонстрировать здесь выбор для ясности... затем предложите новый вариант, который, по моему мнению, обеспечивает лучшую полезность.
write-host "Press any key to continue..."
[void][System.Console]::ReadKey($true)
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
cmd /c Pause | Out-Null
Read-Host -Prompt "Press Enter to continue"
Это композиция выше 1 с использованием обходного пути ISE/kludge, извлеченного из предложения Adam Tech Blog (любезно предоставлено Ником из предыдущих комментариев по этому вопросу страница). Я сделал два небольших улучшения для последнего: добавлен тестовый путь, чтобы избежать ошибки, если вы используете Set-StrictMode (не так ли?), И final 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
}
}
Я предполагаю, что вы хотите прочитать ввод с консоли. Если это так, используйте Read-Host
.
Решения, подобные cmd /c pause
, приводят к запуску и запуску нового командного интерпретатора в фоновом режиме. Хотя это приемлемо в некоторых случаях, это не совсем идеально.
Решения, использующие Read-Host
, заставляют пользователя нажимать Enter и на самом деле не являются "никакой клавишей".
Это решение предоставит вам настоящий интерфейс "нажмите любую клавишу для продолжения" и не запустит новый интерпретатор, который по существу имитирует исходную команду pause
.
Write-Host "Press any key to continue..."
[void][System.Console]::ReadKey($true)
В дополнение к Майкл Соренс ответьте:
Start-Process PowerShell {[void][System.Console]::ReadKey($true)} -wait