Powershell ISE中IF选择交互脚本仅第二个选项生效求助
问题排查与修正
核心错误原因
- 你在判断分支时误用了
$option1/$option2这两个ChoiceDescription对象作为判断依据,而PromptForChoice()方法返回的$choice才是用户选择对应的选项索引值,永远不会出现$option1 -eq 1的情况,所以第一个分支永远不会触发。 PromptForChoice()的返回值是从0开始计数的索引:用户选第一个选项(1)返回0,选第二个选项(2)返回1,你设置的默认值1也对应第二个选项,这也是你始终得到第二个输出的原因之一。- 第二个分支的判断逻辑完全错误,
$option2 -ne 2永远成立,所以脚本始终执行第二个分支的输出。
修正后代码
$title = "Convert Bat to Ps1" $message = "Press 1 to say Hello, or Press 2 to say Goodbye" $option1 = New-Object System.Management.Automation.Host.ChoiceDescription "1", "1" $option2 = New-Object System.Management.Automation.Host.ChoiceDescription "2", "2" $options = [System.Management.Automation.Host.ChoiceDescription[]]($option1, $option2) # 最后一个参数是默认选项的索引,要默认选1就填0,默认选2填1 $choice=$host.ui.PromptForChoice($title, $message, $options, 0) If ($choice -eq 0) { 'Hello, Person!' exit } If ($choice -eq 1) { 'Goodbye, Person!' exit }
内容的提问来源于stack exchange,提问作者Cade
相关产品推荐
相关产品推荐

