$host.ui.promptforchoice取消检测及do...while循环异常退出排查
问题分析与解决
核心问题
你遇到的循环直接退出的关键原因大概率是**$ScriptFileName变量未定义**:调用$host.ui.promptforchoice时,第一个参数(标题)如果是未定义的变量,会触发PowerShell错误,导致脚本直接终止,循环无法继续执行。
另外,脚本未处理$Choice=-1的switch分支,虽不会直接导致循环退出,但会让逻辑不够清晰。
验证与解决步骤
确保
$ScriptFileName有有效值
在调用promptforchoice前,先定义该变量,比如:$ScriptFileName = "管理员权限检查脚本"或者直接替换为字符串作为标题,避免依赖未定义的变量。
修正后的完整脚本
以下是添加变量定义、处理取消分支的修正版本:$ScriptFileName = "管理员权限检查脚本" $s = "" do { $Choice = $host.ui.promptforchoice( $ScriptFileName, "$($s)当前运行脚本的用户无管理员权限。`r`n`r`n运行脚本过程中会多次要求输入密码。`r`n`r`n建议注销后以管理员身份重新登录再运行脚本。是否继续?", @("&是", "&否"), 1 ) switch($Choice) { 0 { Write-Host "开始执行脚本..." # 这里添加后续执行逻辑 break } 1 { Write-Host "`r`n`r`n脚本已退出,请以管理员身份重新登录后运行`r`n" -ForegroundColor Red -BackgroundColor Yellow exit } -1 { Write-Host "已取消选择,请做出有效选择" -ForegroundColor Cyan } } $s = "已取消选择,请做出有效选择。选择「否」可退出脚本`r`n`r`n" } while($Choice -eq -1)逻辑说明
- 定义
$ScriptFileName避免调用弹窗时出错终止脚本; - 添加
-1的switch分支,明确处理取消操作的提示; - 循环条件
while($Choice -eq -1)会确保用户取消弹窗后,重新弹出选择框,直到用户选择「是」或「否」。
- 定义
内容的提问来源于stack exchange,提问作者user66001
相关产品推荐
相关产品推荐

