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

Task Sequence中PowerShell脚本Try Catch块未触发的问题求助

问题分析与解决方案

针对Task Sequence中PowerShell脚本Try/Catch块未触发的问题,结合你描述的场景(手动F8运行正常、故意写错JSON路径触发错误但Catch不执行),以下是具体排查方向和解决方法:

1. 检查PowerShell运行位数差异

SCCM Task Sequence默认调用32位PowerShell(%windir%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe),而你按F8打开的是64位PowerShell。32位环境下部分系统路径访问、命令行为可能存在差异,导致错误处理逻辑失效。

解决方法:

  • 在Task Sequence的「Run PowerShell Script」步骤中,勾选**"Run this step in the 64-bit runtime environment"**选项(针对64位系统部署场景),强制使用64位PowerShell执行脚本。

2. 确保-ErrorAction Stop全局生效

Task Sequence环境中,$ErrorActionPreference全局变量可能被设置为SilentlyContinue等值,会覆盖局部的-ErrorAction Stop参数,导致非终止错误无法转为终止错误触发Catch块。

解决方法:

  • 在脚本的try块开头添加全局错误偏好设置,确保所有命令的错误都能触发终止错误:
    try
    {
        $ErrorActionPreference = "Stop"
        $CDBJson = Get-Content -Path "C:\_SMSTaskSequence\CDB\CDB_Values.json1" -Raw | ConvertFrom-Json
        # 后续命令...
    }
    
  • 也可以为管道两端的命令分别设置-ErrorAction Stop,避免管道前半部分的错误被忽略:
    $CDBJson = Get-Content -Path "C:\_SMSTaskSequence\CDB\CDB_Values.json1" -Raw -ErrorAction Stop | ConvertFrom-Json -ErrorAction Stop
    

3. 修正脚本编码与执行参数

Task Sequence对脚本编码敏感,若脚本为UTF-8无BOM编码,可能导致解析异常;同时执行参数的错误配置也会干扰错误处理逻辑。

解决方法:

  • 将脚本保存为**UTF-16 LE(Unicode)**编码,这是PowerShell脚本的推荐编码,避免执行时的编码解析问题。
  • 检查Task Sequence的脚本执行参数,确保使用-File参数调用脚本,且未添加-ErrorAction SilentlyContinue等会屏蔽错误的参数。

额外调试优化

  • 在Catch块中添加详细错误输出,方便定位问题:
    catch
    {
        Write-Output "捕获错误信息:$($_.Exception.Message)"
        Write-Output "错误堆栈追踪:$($_.ScriptStackTrace)"
        $exitCode = 1
    }
    
  • 调整Stop-Transcript的位置,避免脚本退出后无法停止日志转录:
    Stop-Transcript
    exit $exitCode
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:43:22