我已经搜索过了,但很明显我的google foo很弱。我需要的是一种方法,在控制台提示用户输入,并在一段时间后让请求超时,如果没有输入进来,则继续执行脚本。据我所知,Read-Host不提供此功能。$host.UI.PromptForChoice()和$host.UI.RawUI.ReadKey()也不提供此功能。提前感谢您的任何提示。
编辑:非常感谢Lars Truijens找到了答案。我已经把他指出的代码封装到了一个函数中。注意,我实现它的方式意味着在用户点击一个键和脚本继续执行之间可能会有长达一秒的延迟。
function Pause-Host
{
param(
$Delay = 1
)
$counter = 0;
While(!$host.UI.RawUI.KeyAvailable -and ($counter++ -lt $Delay))
{
[Threading.Thread]::Sleep(1000)
}
}
9条答案
按热度按时间jhdbpxl91#
找到一些内容here:
ntjbwcob2#
这是相当古老的现在,但我如何解决它基于相同的KeyAvailable方法是在这里:
https://gist.github.com/nathanchere/704920a4a43f06f4f0d2
它等待x秒,在最长等待时间内每隔一秒显示一个
.
,如果按下某个键,它返回$true
,否则返回$false
。并用途:
yptwkmov3#
对于正在寻找一种现代解决方案的人,如果该解决方案具有在按下预定义键时退出PowerShell脚本的附加约束,则以下解决方案可能会对您有所帮助:
脚本输出示例:
有关处理更多组合的关键状态,请参阅Microsoft document。
学分:Technet Link
but5z9lq4#
下面是一个击键实用程序函数,它接受:
只有匹配的击键才会反映到屏幕上。
用法:
实施:
dy2hfwbg5#
仍然从powershell工作。等待5秒钟或直到按键。
或许不雅。但很容易。
但是,
在Powershell_ISE中,它会弹出一个新的命令提示符窗口,并立即返回,所以它不会等待(在Powershell控制台中,它使用该控制台并等待).您可以让它在ISE中等待,但需要多做一些工作(仍然会弹出自己的窗口):
lrl1mhuk6#
另一种选择:您可以使用
choice
shell命令,该命令随Windows 2000以后的每个Windows版本提供堆栈溢出语法高亮显示不适用于powershell,
#
在这里表示"注解"gcuhipw97#
ff29svar8#
为了在脚本退出之前选择性地暂停脚本(对于运行headless脚本和在错误输出时暂停非常有用),我在nathanchere's answer后面追加了:
lokaqttq9#
$Host.UI.RawUI.KeyAvailable似乎有缺陷,所以我使用[Console]::KeyAvailable时运气更好: