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
答案 0 :(得分:194)
我认为值得回顾/总结一下这里的选择是为了清晰......然后提供一个我相信提供最佳实用性的新变体。
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"
这是&lt; 1&gt;的复合物。以上是从Adam's Tech Blog的提案中提取的ISE解决方法/ kludge(由Nick在本页的早期评论中提供)。我对后者进行了两处略微改进:添加了Test-Path以避免出现错误,如果你使用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
}
}
答案 1 :(得分:76)
cmd /c pause | out-null
(这不是PowerShell的方式,但它更优雅。)
保存树木。使用单行。
答案 2 :(得分:39)
我假设你想从控制台读取输入。如果是,请使用Read-Host
。
答案 3 :(得分:19)
像cmd /c pause
这样的解决方案会导致新的命令解释程序在后台启动和运行。虽然在某些情况下可以接受,但这并不是理想的。
使用Read-Host
的解决方案强制用户按 Enter 并且不是真正的&#34;任何键&#34;。
此解决方案将为您提供真实的&#34;按任意键继续&#34;接口并且不会启动新的解释器,它将基本上模仿原始的pause
命令。
Write-Host "Press any key to continue..."
[void][System.Console]::ReadKey($true)
答案 4 :(得分:1)
在使用 v2
之前,您可能希望使用 FlushInputBuffer
丢弃任何错误输入控制台的字符,尤其是对于长时间运行的操作:
ReadKey
答案 5 :(得分:0)
除了Michael Sorens'回答:
Start-Process PowerShell {[void][System.Console]::ReadKey($true)} -wait
答案 6 :(得分:0)
10 年后我来到这里......不知道从什么时候开始,但是“暂停”在 PowerShell 中的工作方式就像在 DOS 命令行中一样。