我创建了几个用于执行多个作业的菜单脚本。但他们都有同样的问题:

当你按下一个键时,它的工作不是执行一次,而是执行两次甚至三次

我的代码如下:

Function Write-Menu{
Write-Host ""
Write-Host -BackgroundColor Black -NoNewline "Enter"; Write-Host " Job description"
Write-Host ""
Write-Host ""
Write-Host -BackgroundColor Black -NoNewline "  A  "; Write-Host " Job 2 description"
Write-Host ""
Write-Host -BackgroundColor Black -NoNewline "  B  "; Write-Host " Job 3 description"
Write-Host ""
Write-Host -BackgroundColor Black -NoNewline "  C  "; Write-Host " etc.."
}
Write-Menu
Do {
$key = $null
$key = $Host.UI.RawUI.ReadKey()
Sleep -Milliseconds 250
If ($key.Character -eq 13) {
    #Do Something..
}
If ($key.Character -eq etc) {
    #etc..
}
Clear-Host
Write-Menu
} Until(!($CloseMenu = "false"))

我已经尝试了一切来阻止它,但没有解决这个问题。我也没有看到其他人有这个问题..

无论任何延迟/ sleep 时间,变量被清除/重置,无论其中包含什么代码,它似乎都会将您的按键代码保存 2 或 3 个循环。即使我启动了一个在 8 小时后关闭的 Java 进程,它仍然会这样做。我不知道为什么会发生这种情况。

只有关闭菜单似乎效果很好^^

我想过以不同的方式设置循环,但我想不出任何设置。我可以得到一些帮助吗?谢谢

最佳答案

$Host.UI.RawUI.ReadKey() 读取按键按下,按键释放,两者的组合,并且可以在控制台上显示它们,因此您的“2-3 个键”读取。

为了更好地控制它的行为,您可以使用 options 参数,它是以下一项或多项的位掩码:

  IncludeKeyDown
  IncludeKeyUp
  NoEcho

通过将 "NoEcho, IncludeKeyDown"传递给 ReadKey,您基本上是在告诉它忽略按键事件,并且不回显任何内容。

更多关于它的信息:Source from MSDN

关于loops - Powershell $Host.UI.ReadKey() 菜单循环 - 键未重置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28110069/

10-14 11:12