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

如何用Try-Catch处理PowerShell脚本中msiexec进程未找到的错误?

如何用Try-Catch处理Get-Process找不到msiexec的错误?

我来帮你搞定这个问题!默认情况下,Get-Process -Name 'msiexec'找不到进程时只会输出警告,不会抛出终止错误,所以Try-Catch根本捕获不到这个情况。咱们得先调整命令让它抛出可捕获的错误,再重构脚本逻辑,具体做法如下:

修改后的完整脚本

try {
    # 关键:添加-ErrorAction Stop,让找不到进程时抛出终止错误
    $check = Get-Process -Name 'msiexec' -ErrorAction Stop
    
    # 走到这里说明msiexec正在运行
    Write-Host 'waiting for completion of current process' 
    Start-Sleep -Seconds 10  # 用PowerShell规范写法替换Sleep(10)
    
    # 再次检查进程状态
    try {
        $check = Get-Process -Name 'msiexec' -ErrorAction Stop
        Write-Host 'stopping the process' 
        Stop-Process -Name 'msiexec' -Force 
    }
    catch {
        # 第二次检查时进程已经结束了
        Write-Host 'ready for installation'
    }
}
catch {
    # 第一次检查就没找到进程,直接准备安装
    Write-Host 'ready for installation'
}

核心改动解释

  • -ErrorAction Stop参数:这是触发Try-Catch的关键,它把原本的非终止警告转换成终止错误,让Catch块能捕获到“进程未找到”的场景。
  • 双层Try-Catch结构:外层处理初始的进程检查,内层处理等待后的二次检查,逻辑更清晰,也能准确区分“一开始就没进程”和“等待后进程消失”两种情况。
  • 替换Sleep(10)为Start-Sleep -Seconds 10:这是PowerShell的标准写法,避免和其他编程语言的语法混淆,可读性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:12:17