2014-09-10 125 views
3

使用PowerShell,我想读取按键发生的值,而不必按用户输入键。例如,如果用户按'1',我希望PowerShell脚本立即对选择作出反应,而不需要'输入'。在PowerShell中读取单个按键

我的研究已经转向了ReadKey,

$输入= $ Host.UI.RawUI.ReadKey( 'IncludeKeyDown');

但ReadKey字符串中返回更多的信息比我要求:

72,H,O,真

虽然我可以从这个字符串解析按键,我我更喜欢更直接的选择。有一个存在吗?

回答

4

也许你可以澄清一下 - 但ReadKey返回一个KeyInfo对象不是一个字符串。 KeyInfo包含VirtualKeyCode,Character,ControlKeyState和KeyDown成员 - 按顺序输出字符串中的所有字段。实际上,它看起来像PowerShell在输出示例中刚才调用了.ToString()方法。你可能会想看看Character属性来找到你想要的角色。看看下面的例子,我按:

$key = $Host.UI.RawUI.ReadKey() 
if ($key.Character -eq '1') { 
    "Pressed 1" 
} 
0

关于使用$Host.UI.RawUI.ReadKey('IncludeKeyDown'); Goyuix answer应标记为正确的答案。

我发现$Host.UI.RawUI.ReadKey相当长,想用[console]

但是看起来类似[console]::ReadKey它会Key属性。

$key = [console]::ReadKey() 
if ($key.Key -eq '1') { 
    "Pressed 1" 
} 
相关问题