PowerShell自动选择菜单计时器不倒计时问题求助
PowerShell菜单超时自动选择功能修复
你的问题根源是**Read-Host是阻塞式命令**——它会暂停整个脚本执行,直到用户输入内容并回车,导致计时器循环完全卡住,只有用户输入后才会继续执行计时判断,所以看起来倒计时没在运行。
要实现非阻塞的输入监听+实时倒计时,需要用.NET的控制台输入API替代Read-Host,以下是修复后的完整代码:
function Show-SimpleMenu { Clear-Host Write-Host "Simple Menu Options:" Write-Host "1. Option 1" Write-Host "2. Option 2" Write-Host "3. Option 3" Write-Host "Q. Quit" $timeout = 10 $timer = [System.Diagnostics.Stopwatch]::StartNew() while ($true) { $elapsedSeconds = [math]::Floor($timer.Elapsed.TotalSeconds) $remainingSeconds = $timeout - $elapsedSeconds # 超时逻辑 if ($remainingSeconds -le 0) { Write-Host "`rTimeout: Automatically selecting Option 1." Option1 break } # 实时更新倒计时(覆盖当前行) Write-Host "`rTime Remaining: $remainingSeconds seconds | Enter your selection: " -NoNewline # 非阻塞检查用户输入 if ([Console]::KeyAvailable) { $key = [Console]::ReadKey($true) # $true表示不回显按键 $selection = $key.KeyChar.ToString().ToUpper() # 处理回车键(可选,确保用户按回车确认输入) if ($key.Key -eq [ConsoleKey]::Enter) { continue } # 处理选择逻辑 switch ($selection) { '1' { Write-Host "`rOption 1 selected" Option1 break } '2' { Write-Host "`rOption 2 selected" Option2 break } '3' { Write-Host "`rOption 3 selected" Option3 break } 'Q' { Write-Host "`rExiting..." return } default { Write-Host "`rInvalid selection. Please try again." # 重置计时器,避免输入错误后直接超时 $timer.Restart() } } # 处理完有效输入后跳出循环 if ($selection -match '[1-3Q]') { break } } # 控制循环频率,避免占用过高CPU Start-Sleep -Milliseconds 200 } } function Option1 { Write-Host "`nOption 1 selected" } function Option2 { Write-Host "`nOption 2 selected" } function Option3 { Write-Host "`nOption 3 selected" } # 调用菜单 Show-SimpleMenu
关键修复点说明:
- 非阻塞输入监听:用
[Console]::KeyAvailable检查是否有按键输入,只有存在输入时才调用[Console]::ReadKey()读取,避免阻塞循环。 - 实时更新倒计时:用
Write-Host "r..." -NoNewline`实现行内覆盖,让倒计时在同一位置刷新,避免重复输出。 - 输入处理优化:支持按键直接选择(无需回车),对无效输入重置计时器,避免误操作后直接超时。
- CPU占用控制:循环中加入
Start-Sleep -Milliseconds 200,降低脚本运行时的CPU使用率。
注:PowerShell ISE的控制台环境和原生PowerShell控制台存在差异,部分.NET控制台API在ISE中可能表现异常,建议在原生Windows PowerShell 5.1控制台测试。
内容的提问来源于stack exchange,提问作者Mark Baken
相关产品推荐
相关产品推荐

