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

SQL Agent作业PowerShell步骤AuthorizationManager校验失败求助

SQL Agent PowerShell作业中的授权与可信发布者问题解答

问题背景

在SQL Agent作业的PowerShell步骤中使用代理凭据运行时,遭遇以下异常与问题:

  • 抛出AuthorizationManager check failed错误
  • 执行import-module SQLPS -Version 15.0时,加载扩展类型数据文件失败
  • 以代理账户运行SQLPS.exe时,弹出“未可信发布者”提示,但该发布者为微软官方,且对应证书已导入当前用户及本地机器的TrustedPublisher存储,当前PowerShell执行策略为AllSigned

1. 已导入信任证书为何仍弹窗?

  • 代理账户的证书存储独立:你导入证书到当前登录用户或本地机器的TrustedPublisher,但SQL Agent代理使用指定账户运行,该账户的用户级TrustedPublisher存储可能未导入对应证书。Windows证书存储分机器级和用户级,代理进程优先读取自身用户级存储。
  • 证书哈希不匹配:核对SQLPS.exe的数字签名证书哈希,与你导入的证书哈希是否一致。微软有多份代码签名证书,可能你导入的不是用于签名SQLPS.exe的那一份。
  • 执行策略上下文差异:机器级执行策略设为AllSigned,但代理账户的用户级执行策略可能被设为更严格的规则(如Restricted)。可在代理账户上下文运行Get-ExecutionPolicy -List确认。

2. PowerShell是否存在中间信任列表?

PowerShell没有所谓的“中间信任列表”,其代码签名信任机制完全依托Windows证书体系:

  • 核心依赖TrustedRoot Certification Authorities(根证书信任)和Trusted Publishers(发布者证书信任)两类存储
  • 执行策略(ExecutionPolicy)是额外的管控层,与证书信任互补,不属于中间信任机制
  • 少数PowerShell模块可能有内部校验逻辑,但这是模块自身行为,并非PowerShell全局的中间信任列表

3. 能否非交互式设置“始终运行”?

可以通过以下方式实现非交互式信任,消除弹窗:

  • 将证书导入代理账户的用户级TrustedPublisher:
    在代理账户上下文(例如用runas /user:代理账户 powershell打开会话)执行:
    # 获取SQLPS.exe的签名证书
    $cert = (Get-AuthenticodeSignature -FilePath "C:\Program Files\Microsoft SQL Server\150\Tools\Binn\SQLPS.exe").SignerCertificate
    # 导出并导入到当前用户的TrustedPublisher
    $cert | Export-Certificate -FilePath "C:\temp\sqlps_sign_cert.cer" -Type CERT
    certutil -addstore TrustedPublisher "C:\temp\sqlps_sign_cert.cer"
    
  • 调整代理账户的执行策略:
    若证书导入后仍有问题,可在代理账户上下文设置用户级执行策略:
    Set-ExecutionPolicy AllSigned -Scope CurrentUser -Force
    
  • 在SQL Agent步骤中指定进程级执行策略:
    在作业的PowerShell脚本开头添加以下命令,仅对当前作业进程生效:
    Set-ExecutionPolicy AllSigned -Scope Process -Force
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:12:46