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

无法获取Get-SQLAgent服务器属性,该如何解决?

问题分析与解决方案

首先直接给结论:这个命令在你的环境下本来就无法正常运行,核心原因是你使用的SqlServer PowerShell模块版本(21.1.18068)和SQL Server 2012 SP4的兼容性不匹配。微软从SqlServer模块16.x版本开始,就不再对SQL Server 2012提供官方支持,更高版本的模块在访问旧版SQL Server的Agent集合属性(比如Properties、TargetServerGroups)时会触发T-SQL执行异常。

下面是具体的解决办法,按优先级排序:

1. 降级SqlServer模块到兼容版本

这是最直接的修复方案,因为新版本模块已经放弃了对SQL Server 2012的适配:

  • 先卸载当前的高版本模块:
    # 卸载指定版本(如果有多个版本共存)
    Uninstall-Module -Name SqlServer -RequiredVersion 21.1.18068 -Force
    # 如果只有这一个版本,直接用
    Uninstall-Module -Name SqlServer -Force
    
  • 安装兼容SQL Server 2012的最新稳定版本(推荐15.x系列,比如15.0.18206.0):
    Install-Module -Name SqlServer -RequiredVersion 15.0.18206.0 -Force -AllowClobber
    
  • 验证安装结果:
    (Get-Module -Name SqlServer -ListAvailable).Version
    
    切换到这个版本后,再执行(Get-SqlAgent -ServerInstance DBSERVER02).Properties应该就能正常枚举所有属性了。

2. 用T-SQL替代PowerShell模块获取数据

如果不想降级模块,可以直接通过T-SQL查询msdb数据库的系统对象来获取所需信息,绕开模块的兼容性问题:

  • 获取SQL Agent的核心属性:
    USE msdb;
    EXEC dbo.sp_get_sqlagent_properties;
    
  • 获取目标服务器组信息:
    USE msdb;
    SELECT * FROM dbo.sysservergroups;
    SELECT * FROM dbo.sysjobservers;
    
  • 在PowerShell中执行这些T-SQL的命令:
    Invoke-SqlCmd -ServerInstance DBSERVER02 -Database msdb -Query "EXEC dbo.sp_get_sqlagent_properties"
    

3. 排查潜在的权限问题(虽然无提示,但仍需确认)

虽然你没有收到权限报错,但某些Agent属性的访问需要特定的msdb数据库角色权限:

  • 你的账号需要至少拥有SQLAgentOperatorRole角色权限(更高的SQLAgentAdminRole或SQLAgentReaderRole也可以)
  • 执行以下T-SQL检查你的账号权限:
    USE msdb;
    EXEC sp_helprolemember 'SQLAgentOperatorRole';
    
    如果你的账号不在该角色中,联系管理员添加即可(不过这不是你当前报错的直接原因,但能避免后续其他操作的权限问题)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:16:29