You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

$host.ui.promptforchoice取消检测及do...while循环异常退出排查

问题分析与解决

核心问题

你遇到的循环直接退出的关键原因大概率是**$ScriptFileName变量未定义**:调用$host.ui.promptforchoice时,第一个参数(标题)如果是未定义的变量,会触发PowerShell错误,导致脚本直接终止,循环无法继续执行。

另外,脚本未处理$Choice=-1的switch分支,虽不会直接导致循环退出,但会让逻辑不够清晰。

验证与解决步骤

  1. 确保$ScriptFileName有有效值
    在调用promptforchoice前,先定义该变量,比如:

    $ScriptFileName = "管理员权限检查脚本"
    

    或者直接替换为字符串作为标题,避免依赖未定义的变量。

  2. 修正后的完整脚本
    以下是添加变量定义、处理取消分支的修正版本:

    $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)
    
  3. 逻辑说明

    • 定义$ScriptFileName避免调用弹窗时出错终止脚本;
    • 添加-1的switch分支,明确处理取消操作的提示;
    • 循环条件while($Choice -eq -1)会确保用户取消弹窗后,重新弹出选择框,直到用户选择「是」或「否」。

内容的提问来源于stack exchange,提问作者user66001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 18:57:08