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

PowerShell调用SMO时ManagedComputer.ServerInstances集合为空排查

ServerInstances集合为空的原因及SSMS 2017影响说明

可能的原因

  • WMI提供器版本不匹配:你加载的Microsoft.SqlServer.SqlWmiManagement程序集版本如果和目标主机上安装的SQL Server WMI提供器版本不兼容,就会出现无法枚举实例的问题。特别是如果目标主机上同时存在多个版本的SQL Server组件,高版本的WMI提供器可能覆盖了旧版本的注册信息,导致低版本的SMO库无法正确读取实例配置。
  • 权限不足:当前运行PowerShell会话的账号没有目标主机WMI命名空间root\Microsoft\SqlServer\ComputerManagement13(SQL Server 2016对应版本号13)的读取权限,会导致枚举ServerInstances时返回空集合。注意即使你能正常读取Services集合,也不代表你有实例相关节点的读取权限,两类节点的权限控制是独立的。
  • SQL Server WMI提供器损坏或未正确注册:SQL Server安装过程中如果WMI提供器注册失败,或者后续被其他软件修改、删除了注册表关联项,就会导致SMO无法读取实例列表。你可以尝试在目标主机上重新注册对应版本的WMI提供器:运行mofcomp "C:\Program Files (x86)\Microsoft SQL Server\130\Shared\sqlmgmproviderxpsp2up.mof",之后重启WMI服务即可生效。
  • 架构位宽不一致:虽然你使用的是64位PowerShell v5会话,但如果目标主机上的SQL Server WMI提供器只注册了32位版本,也会导致64位会话读取不到实例信息。可以尝试启动32位PowerShell(路径为C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe)重新运行代码验证。
  • 集群实例配置异常:你所处的是集群环境,若部分集群节点的SQL Server实例配置没有同步写入本地WMI命名空间,或者集群资源的注册信息存在异常,也会导致本地WMI查询返回空的实例集合。

SSMS 2017的影响

SSMS 2017确实会对该集合的查询产生影响。SSMS 2017自带了SQL Server 2017版本的SMO库和WMI提供器,安装过程中会更新系统中注册的Microsoft.SqlServer.SqlWmiManagement程序集版本,同时修改WMI提供器的关联配置。如果你的代码没有指定明确的程序集版本,加载时会优先调用高版本的程序集,当高版本提供器和SQL Server 2016的WMI节点存在兼容性问题时,就会出现ServerInstances枚举为空的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 04:21:03