Powershell $Host.UI.ReadKey() 菜单循环 - 键未重置
Powershell $Host.UI.ReadKey() Menu loop - Key not resetting
我已经创建了几个菜单脚本来执行多个作业。但是他们都有同样的问题:
当你按下一个键时,它的工作不是执行一次,而是执行两次甚至三次
我的代码如下:
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"))
我已尽一切努力阻止它,但没有解决此问题。我也没有看到其他人有这个问题..
它似乎将您按下的键代码保存 2 或 3 个循环,而不管任何延迟/睡眠时间、变量被清除/重置以及其中包含什么代码。即使我启动了一个 java 进程,该进程在 8 小时后关闭,它仍然会这样做。我不知道为什么会这样。
只关闭菜单似乎效果不错^^
我想过以不同的方式设置循环,但我想不出任何设置。我需要一些帮助吗?谢谢
$Host.UI.RawUI.ReadKey()
读取按下的键、释放的键、两者的组合,并可以在控制台上显示它们,因此读取“2-3 个键”。
为了更好地控制它的行为方式,您可以使用选项参数,它是以下一项或多项的位掩码:
IncludeKeyDown
IncludeKeyUp
NoEcho
通过将 "NoEcho, IncludeKeyDown" 传递给 ReadKey,您基本上是在告诉它忽略按键事件,并且不回显任何内容。
更多相关信息:Source from MSDN
我已经创建了几个菜单脚本来执行多个作业。但是他们都有同样的问题:
当你按下一个键时,它的工作不是执行一次,而是执行两次甚至三次
我的代码如下:
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"))
我已尽一切努力阻止它,但没有解决此问题。我也没有看到其他人有这个问题..
它似乎将您按下的键代码保存 2 或 3 个循环,而不管任何延迟/睡眠时间、变量被清除/重置以及其中包含什么代码。即使我启动了一个 java 进程,该进程在 8 小时后关闭,它仍然会这样做。我不知道为什么会这样。
只关闭菜单似乎效果不错^^
我想过以不同的方式设置循环,但我想不出任何设置。我需要一些帮助吗?谢谢
$Host.UI.RawUI.ReadKey()
读取按下的键、释放的键、两者的组合,并可以在控制台上显示它们,因此读取“2-3 个键”。
为了更好地控制它的行为方式,您可以使用选项参数,它是以下一项或多项的位掩码:
IncludeKeyDown
IncludeKeyUp
NoEcho
通过将 "NoEcho, IncludeKeyDown" 传递给 ReadKey,您基本上是在告诉它忽略按键事件,并且不回显任何内容。
更多相关信息:Source from MSDN