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

ARM模板CustomScriptExtension返回退出码1,安装Sophos等应用失败咨询

问题根因分析
  • 执行上下文身份隔离:Azure CustomScriptExtension 默认以 Local System 本地系统账户 执行脚本,和你手动登录执行的管理员账户是完全隔离的身份上下文。你脚本中用cmdkey添加的SMB共享凭据仅对当前执行cmdkey的账户生效,Local System 账户无法读取到其他用户的凭据缓存,因此无法访问\\stgacctname.file.core.windows.net\fileshare下的安装包,直接运行UNC路径的exe会触发找不到文件的错误,最终返回退出码1。
  • 执行策略配置无效:你脚本中的Set-ExecutionPolicy Bypass默认作用域为当前用户(CurrentUser),对Local System账户的PowerShell执行策略不生效,且未添加-Force参数,非交互模式下如果触发执行策略确认弹窗,会直接导致脚本执行中断。
  • 安装进程未等待:直接调用UNC路径的exe没有添加等待逻辑,脚本可能在安装程序还未完成执行时就提前退出,也会被CustomScriptExtension判定为执行失败。
  • 非交互模式兼容性:部分安装程序的静默参数在无会话的System账户上下文下,和普通管理员登录会话下的表现存在差异,即便手动执行正常,也可能在System上下文下出现未预期的报错。
修复方案
  1. 调整执行策略配置,将脚本第一行替换为:
Set-ExecutionPolicy Bypass -Scope Process -Force

该配置仅对当前脚本进程生效,无需修改系统级策略,且不会弹出确认提示。
2. 优先避免通过SMB共享拉取安装包,将SophosSetup.exe、Notepad++安装包和脚本一起上传到Blob存储,由CustomScriptExtension自动下载到本地后再执行,规避SMB凭据访问的问题。
3. 若必须使用SMB共享,修改脚本使用明确的凭据映射磁盘访问,示例如下:

$secpasswd = ConvertTo-SecureString "存储账户密钥" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ("AZURE\stgacctname", $secpasswd)
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\stgacctname.file.core.windows.net\fileshare" -Credential $credential

后续直接访问Z盘下的安装包即可。
4. 安装程序执行时添加等待逻辑,捕获退出码:

$sophosInstall = Start-Process -FilePath "Z:\SophosSetup.exe" -ArgumentList "--quiet --devicegroup=`"Test servers`"" -Wait -NoNewWindow -PassThru
if ($sophosInstall.ExitCode -ne 0) {
    exit $sophosInstall.ExitCode
}
$nppInstall = Start-Process -FilePath "Z:\npp.8.1.4.Installer.x64.exe" -ArgumentList "/S" -Wait -NoNewWindow -PassThru
exit $nppInstall.ExitCode
  1. 脚本中添加逐步骤的日志输出,将每一步的执行结果写入本地日志文件,方便后续排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:45:01