Powershell接收用户输入命令行控制用户单选
我们在进行Powershell开发时经常会遇到用户选择的场景,Powershell中接收用户输入用原始的Read-Host接收用户输入的话比较单一,也非常局限,那么能不能将这种功能做成可视化的单选呢?当然是可以的代码如下,仅供参考
function Show-Menu {
param (
[string[]]$Options
)
$selectedOptionIndex = 0
while ($true) {
# 显示菜单列表
for ($i = 0; $i -lt $Options.Length; $i++) {
$isSelected = $i -eq $selectedOptionIndex
if($isSelected){
# 显示绿色文字 以[*]开头
Write-Host ("{0} {1}" -f '[*]', $Options[$i]) -ForegroundColor Green
}else{
Write-Host ("{0} {1}" -f '[ ]', $Options[$i])
}
}
# 监听用户输入
$key = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
# Process user input
switch ($key.VirtualKeyCode) {
38 {
# 按下 上键触发
$selectedOptionIndex = [Math]::Max(0, $selectedOptionIndex - 1)
# 将光标移动到屏幕顶部
[Console]::SetCursorPosition(0, [Console]::CursorTop - $Options.Length)
}
40 {
# 按下 下键触发
# 将光标移动到屏幕顶部
$selectedOptionIndex = [Math]::Min($Options.Length - 1, $selectedOptionIndex + 1)
[Console]::SetCursorPosition(0, [Console]::CursorTop - $Options.Length)
}
13 { # 按下 回车键触发
return $Options[$selectedOptionIndex]
}
default{
# 请勿删除-当用户点击其他按键的时候依然要进行显示偏移
[Console]::SetCursorPosition(0, [Console]::CursorTop - $Options.Length)
}
}
}
}
# 案例
Write-Host "You selected: $selectedOption"
$options = @("Option A", "Option B", "Option C")
$selectedOption = Show-Menu -Options $options
Write-Host $selectedOption
效果如下:
发表评论