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

Intune部署Win32App打包PowerShell弹窗脚本运行失败问题

Intune Win32App部署PowerShell脚本执行异常排查指引

问题背景

将PowerShell脚本打包为Win32App格式(.intunewin)通过Intune分发部署,先后测试System上下文、User上下文两种部署模式,使用CMD批处理作为执行入口调用PowerShell脚本,两种模式下均部署失败,本地管理员账号直接运行脚本无异常。

现有部署配置

  • 安装入口脚本(filename.cmd)内容:
@echo off
powershell -ExecutionPolicy bypass -command "&{.\TestPopUp.ps1}"
  • 被调用的PowerShell脚本内容:
Set-ExecutionPolicy -ExecutionPolicy Bypass -Force
$TPath = "C:\ProgramData\ScriptTest"
$TPR=Test-Path -Path $TPath
if ($TPR -ne "true"){
    $wshell = New-Object -ComObject Wscript.Shell
    $Output = $wshell.Popup("This is a Text",0,"Header it is!",0+16)
    New-Item -Path $TPath -ItemType Directory -InformationAction SilentlyContinue | Out-Null
}

已确认故障现象

  • 本地设备使用管理员权限直接运行启动脚本,可正常弹出Wscript.Shell弹窗,成功创建C:\ProgramData\ScriptTest目录,所有逻辑执行符合预期
  • System上下文部署时,Intune日志显示脚本已触发,但无弹窗弹出、目标目录未创建,因检测规则以目录存在性为判定依据,平台判定部署失败
  • User上下文部署时,日志同样记录执行失败
  • 测试覆盖Intune全托管虚拟机、物理设备、Co-Managed(共同管理)模式设备,故障复现一致

排查方向与修复方案

1. 修复相对路径调用错误

Intune Management Extension(IME)执行Win32App安装逻辑时,默认工作目录为系统目录,而非安装包解压后的缓存根目录,当前CMD脚本中用.\TestPopUp.ps1的相对路径调用PowerShell脚本,大概率会出现找不到文件的错误,直接导致脚本执行中断。

  • 修复方案:在CMD脚本开头先切换到批处理文件自身所在目录(即安装包解压根目录),再执行后续调用,修正后的CMD参考:
@echo off
:: 切换到批处理所在目录
pushd "%~dp0"
powershell.exe -ExecutionPolicy Bypass -NoProfile -NonInteractive -File ".\TestPopUp.ps1"
popd
  • 注意调用PowerShell时优先用-File参数指定脚本路径,不要用-Command嵌套脚本块的写法,后者执行可靠性更低。

2. 排查System上下文会话0隔离阻塞问题

System账户运行在系统专属的Session 0隔离会话中,默认无法与当前登录用户的交互式桌面进行UI交互,脚本中调用的Wscript.Shell.Popup属于交互式UI组件,在Session 0环境下不会弹出窗口,且会无限阻塞脚本进程等待用户响应,直接导致后续创建目录的逻辑无法执行。

  • 验证方式:临时注释掉弹窗相关代码,重新打包部署,确认目录是否可以正常创建。如果需要实现向登录用户弹窗的逻辑,System上下文下需要使用支持跨会话调用的方案,或切换到User上下文部署执行UI相关逻辑。
  • System上下文执行脚本必须加-NonInteractive参数,避免脚本因等待交互输入挂起。

3. 修复PowerShell脚本逻辑不严谨问题

当前脚本存在两处易触发异常的写法:

  • Test-Path返回值为布尔类型$true/$false,而非字符串"true",当前判断逻辑$TPR -ne "true"依赖PowerShell隐式类型转换,存在判断失效风险
  • 创建目录时未加-Force参数,仅靠-InformationAction SilentlyContinue无法抑制权限类报错,可能导致目录创建失败
  • 修正后的脚本逻辑参考:
Set-ExecutionPolicy -ExecutionPolicy Bypass -Force
$TPath = "C:\ProgramData\ScriptTest"
if (-not (Test-Path -Path $TPath)){
    # 弹窗逻辑仅在用户上下文可正常生效,System上下文请注释或替换为跨会话弹窗方案
    $wshell = New-Object -ComObject Wscript.Shell
    $Output = $wshell.Popup("This is a Text",0,"Header it is!",0+16)
    New-Item -Path $TPath -ItemType Directory -Force | Out-Null
}

4. 本地日志定位具体报错

不要仅依赖Intune控制台的汇总执行状态,直接到设备本地抓取详细日志定位根因:

  • IME客户端日志路径:C:\ProgramData\Microsoft\IntuneManagementExtension\Logs,用CMTrace打开IntuneManagementExtension.log,可查看脚本执行的完整错误码、标准输出/错误输出信息,直接定位是文件找不到、权限不足还是脚本语法错误
  • 可临时在PowerShell脚本开头加Start-Transcript -Path "C:\ProgramData\ScriptTest_Install.log" -Append,结尾加Stop-Transcript,把脚本全程执行输出转储到本地日志文件,部署后直接查看该日志即可定位具体报错步骤。

5. 共同管理(Co-Managed)设备策略排查

对于Co-Managed模式设备,需要先确认工作负载配置:如果Win32App工作负载的归属权仍配置为SCCM,Intune下发的Win32App策略不会被IME正常执行,可查看设备上的C:\Windows\CCM\Logs\CoManagementHandler.log确认Win32App工作负载的实际归属方。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:06:06