Der*_*ell 105 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
Run Code Online (Sandbox Code Playgroud)
Mic*_*ens 214
我认为值得回顾/总结一下这里的选择是为了清晰......然后提供一个新的变体,我相信它提供了最好的效用.
write-host "Press any key to continue..."
[void][System.Console]::ReadKey($true)
Run Code Online (Sandbox Code Playgroud)
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Run Code Online (Sandbox Code Playgroud)
cmd /c Pause | Out-Null
Run Code Online (Sandbox Code Playgroud)
Read-Host -Prompt "Press Enter to continue"
Run Code Online (Sandbox Code Playgroud)
这是上面的<1>以及从Adam的技术博客上的提案中提取的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
}
}
Run Code Online (Sandbox Code Playgroud)
Car*_*nez 84
cmd /c pause | out-null
Run Code Online (Sandbox Code Playgroud)
(这不是PowerShell的方式,但它更优雅.)
拯救树木.使用单行.
Ro *_* Mi 21
这些解决方案cmd /c pause会导致新的命令解释程序在后台启动和运行.虽然在某些情况下可以接受,但这并不是很理想.
使用Read-Host强制用户按下的解决方案Enter并不是真正的"任何关键".
此解决方案将为您提供真正的"按任意键继续"界面,并且不会启动新的解释器,这将基本上模仿原始pause命令.
Write-Host "Press any key to continue..."
[void][System.Console]::ReadKey($true)
Run Code Online (Sandbox Code Playgroud)
除了迈克尔·索伦斯的回答之外:
Start-Process PowerShell {[void][System.Console]::ReadKey($true)} -Wait -NoNewWindow
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
193911 次 |
| 最近记录: |