2014-09-10 52 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" 
}