如何在 PowerShell 中按任意键继续
-
使用
ReadKey (System.Console)启用 PowerShell 中的“按任意键继续” -
使用
ReadKey (Console)启用 PowerShell 中的“按任意键继续” -
使用
ReadKey (RawUI)启用 PowerShell 中的“按任意键继续” -
使用
Read-Host启用 PowerShell 中的“按任意键继续” -
使用
cmd /c 'pause'命令在 PowerShell 中启用“按任意键继续” -
使用
timeout在 PowerShell 中启用“按任意键继续” - 结论
在 PowerShell 脚本中,启用“按任意键继续”功能是一个常见的需求,特别是在创建交互式命令行应用程序或向用户提供反馈时。有几种方法可以实现此功能,每种方法都有其自身的优点和用例。
本文探讨了在 PowerShell 脚本中实现“按任意键继续”功能的各种方法,从内置 cmdlet 到利用外部命令和 COM 对象。
使用 ReadKey (System.Console) 启用 PowerShell 中的“按任意键继续”
在 PowerShell 中,[System.Console]::ReadKey() 方法用于从标准输入流(通常是键盘)读取用户按下的下一个键或功能键。当没有任何参数调用时,此方法会等待用户按下一个键,并返回一个类型为 [System.ConsoleKeyInfo] 的对象,表示所按的键。
System.Console ReadKey 如下执行。它接受除 Shift、Alt、Ctrl 和其他修饰键以外的任何键。
$keyInfo = [System.Console]::ReadKey($true)
Write-Host "Key Pressed: $($keyInfo.KeyChar)"
在代码行 $keyInfo = [System.Console]::ReadKey($true) 中,我们利用 [System.Console]::ReadKey() 方法捕获用户输入。通过传递 $true 作为参数,我们表明所按的键不应显示在控制台窗口中。
这防止了控制台中出现不必要的字符,使用户体验更清晰。要显示 $keyInfo 的输出,我们可以使用点符号访问它的属性。
输出:

使用 ReadKey (Console) 启用 PowerShell 中的“按任意键继续”
您可以使用 [Console]::ReadKey() 在 PowerShell 中启用“按任意键继续”。它可以读取键和修饰符,同时暂停执行。它排除了 Shift、Alt、Ctrl 和其他修饰键。
$keyInfo = [Console]::ReadKey()
在代码行 $keyInfo = [Console]::ReadKey() 中,我们利用 [Console]::ReadKey() 方法捕获用户输入。此方法等待用户按下一个键,并返回一个表示所按键的对象,将其存储在变量 $keyInfo 中。
输出:

使用 ReadKey (RawUI) 启用 PowerShell 中的“按任意键继续”
在 PowerShell 中,$Host.UI.RawUI.ReadKey() 方法用于从控制台输入读取用户按下的下一个键或功能键。当调用时,此方法等待用户按下一个键并返回一个表示所按键的对象。
此对象包含诸如 Character 的属性,表示所按键的 Unicode 字符,以及 KeyDown,指示键是否被按下。
此方法与 [Console]::ReadKey() 类似。它接受任何键,包括 Ctrl、Shift、Alt 和其他修饰键。
可以在 RawUI ReadKey 方法中传递不同的 ReadKeyOptions,例如 IncludeKeyDown、IncludeKeyUp、NoEcho 和 AllowCtrlC。
示例:
$keyInfo = $Host.UI.RawUI.ReadKey()
在此示例中,我们使用 $Host.UI.RawUI.ReadKey() 捕获用户按下的键并将其存储在 $keyInfo 变量中。此方法等待用户按下一个键并返回一个表示所按键的对象。
$keyInfo 对象包含诸如 Character(表示所按键的字符)和 KeyDown(指示键是否被按下)等属性。
输出:

使用 Read-Host 启用 PowerShell 中的“按任意键继续”
PowerShell 中的 Read-Host cmdlet 是一个多功能工具,用于从控制台窗口捕获用户输入。其主要目的是向用户显示提示消息,并等待他们输入一个值,然后将其存储在变量中以便在脚本中进一步处理。
示例:
Read-Host -Prompt "Press any key to continue"
在此示例中,我们使用 Read-Host 和 -Prompt 参数向用户显示消息“按任意键继续…”。脚本在此处暂停执行,等待用户输入任何文本后按 Enter 键。
尽管不完全是“按任意键”,但此方法通过要求用户输入来实现类似的结果。
输出:

使用 cmd /c 'pause' 命令在 PowerShell 中启用“按任意键继续”
在 PowerShell 脚本中,cmd /c 'pause' 方法提供了一种简单的方式来暂停脚本执行,并在继续之前等待用户确认。此方法利用 cmd 命令在 PowerShell 脚本中执行暂停命令。
执行时,暂停命令显示消息“按任意键继续 . . .”,并等待用户按下任意键,然后允许脚本继续执行。
示例:
cmd /c pause
在此示例中,我们使用 cmd /c 'pause' 命令来暂停脚本执行,并等待用户输入。执行时,命令提示符窗口显示消息“按任意键继续 . . .”,并在用户按下任意键之前等待,然后允许脚本继续。
输出:

使用 timeout 在 PowerShell 中启用“按任意键继续”
timeout 命令可以暂停执行特定时间段或无限时间。您可以使用 /t 选项指定以秒为单位的时间。
指定的超时有效值范围为 -1 到 99999。
示例:
timeout /t 5
在此示例中,我们使用 timeout 命令将脚本执行暂停 5 秒。这有效地创建了一个提示,要求用户在继续之前等待 5 秒。
输出:

-1 值用于在未按下键时无限期暂停执行。
timeout /t -1
输出:

结论
在 PowerShell 脚本中实现“按任意键继续”功能对于创建交互式和用户友好的命令行应用程序至关重要。通过利用方法例如 [System.Console]::ReadKey()、[Console]::ReadKey()、Read-Host、cmd /c 'pause'、timeout 和 WScript.Shell Popup,脚本作者可以为用户提供清晰的提示,并在用户确认之前暂停执行。
每种方法提供独特的功能,并可以根据具体要求进行定制,确保无缝的用户体验和增强的脚本交互性。无论是显示信息消息、确认操作还是创建交互式实用程序,PowerShell 都提供多功能工具以满足各种脚本需求。
