如何用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 
 cmd /c pause | out-null 

(这不是PowerShell的方式,但它更优雅。)

保存树木。 使用单线。

为了清楚起见,我认为在这里重新总结/总结select是值得的…然后提供一个新的变化,我相信提供了最好的效用。

<1> ReadKey(System.Console)

 write-host "Press any key to continue..." [void][System.Console]::ReadKey($true) 
  • 优点:接受任何键,但正确排除Shift,Alt,Ctrl修饰键。
  • 缺点:在PS-ISE中不起作用。

<2> ReadKey(RawUI)

 Write-Host "Press any key to continue ..." $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") 
  • 缺点:在PS-ISE中不起作用。
  • 缺点:不排除修饰键。

3厘米

 cmd /c Pause | Out-Null 
  • 缺点:在PS-ISE中不起作用。
  • 缺点:第一次使用时显然启动新的shell/窗口; 后续使用不明显,但仍有开销

<4>读主机

 Read-Host -Prompt "Press Enter to continue" 
  • 优势:适用于PS-ISE。
  • 缺点:只接受回车键。

<5> ReadKey复合

这是上面的<1>与从Adam's Tech Blog上的提议中提取的ISE解决方法/ kludge的组合(上面的评论在此提供的Nick提供的)。 我对后者做了两点小小的改进:如果你使用Set-StrictMode (你这样做,不是吗?),添加Test-Path来避免错误,最后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中工作(尽pipe只有input或鼠标点击)
  • 缺点:不是一蹴而就的!

我假设你想从控制台读取input。 如果是这样,请使用Read-Host

cmd /c pause这样的解决scheme会导致新的命令解释器在后台启动并运行。 尽pipe在某些情况下可以接受,但这并不是很理想。

使用Read-Host的解决scheme强制用户按Enter键 ,而不是真正的“任何键”。

这个解决scheme将给你一个真正的“按任意键继续”界面,并不会启动一个新的解释器,这将基本上模仿原来的pause命令。

 Write-Host "Press any key to continue..." [void][System.Console]::ReadKey($true) 

除了迈克尔·索伦斯的回答:

在一个新的过程中ReadKey

 Start-Process PowerShell {[void][System.Console]::ReadKey($true)} -wait 
  • 优点:接受任何键,但正确排除Shift,Alt,Ctrl修饰键。
  • 优势:适用于PS-ISE。