SQL Server 14 WMI Provider不可用,如何通过PowerShell使其可用?
别着急,咱们一步步来搞定这个SQL Server WMI Provider不可用的问题,等Provider恢复正常,就能顺利启用TCP/IP和Named Pipes协议了。
修复SQL Server 14 WMI Provider不可用问题
1. 先检查核心WMI服务状态
首先得确保目标机器上的关键WMI相关服务在正常运行:
- 打开管理员权限的PowerShell,运行以下命令检查服务状态:
确认这两个服务的状态是Get-Service -ComputerName <COMPUTER NAME> -Name winmgmt, sqlwriterRunning。如果没运行,直接启动并设置为自动启动:# 启动服务 Start-Service -ComputerName <COMPUTER NAME> -Name winmgmt, sqlwriter # 设置开机自动启动,避免重启后失效 Set-Service -ComputerName <COMPUTER NAME> -Name winmgmt -StartupType Automatic Set-Service -ComputerName <COMPUTER NAME> -Name sqlwriter -StartupType Automatic
2. 重新注册SQL Server WMI Provider
WMI Provider的注册信息损坏是常见原因,咱们重新注册一遍:
- 切换到SQL Server 14的Shared目录(默认路径如下,若你安装路径不同请自行替换):
cd "C:\Program Files\Microsoft SQL Server\140\Shared" - 运行MOF文件编译命令,重新注册Provider:
执行成功后会返回“MOF file has been successfully parsed”之类的提示。mofcomp sqlmgmproviderxpsp2up.mof
3. 验证WMI连接是否恢复
修复后,先确认WMI Provider能正常访问:
Get-WmiObject -ComputerName <COMPUTER NAME> -Namespace root\Microsoft\SqlServer\ComputerManagement14 -Class SqlServiceAdvancedProperty
如果能返回正常的属性列表,说明WMI Provider已经可用了。要是还报错,记得检查目标机器的防火墙——确保允许WMI的端口(默认135+动态端口)被你的管理机器访问。
4. 启用TCP/IP和Named Pipes协议
现在WMI正常了,就可以用PowerShell启用协议了,给你一段靠谱的脚本:
# 连接到SQL Server的WMI命名空间 $wmiNamespace = "root\Microsoft\SqlServer\ComputerManagement14" $serverProtocols = Get-WmiObject -ComputerName <COMPUTER NAME> -Namespace $wmiNamespace -Class ServerNetworkProtocol # 启用TCP/IP协议 $tcpProtocol = $serverProtocols | Where-Object { $_.ProtocolName -eq "Tcp" } if ($tcpProtocol) { $tcpProtocol.SetEnable() Write-Host "TCP/IP协议已成功启用" } # 启用Named Pipes协议 $namedPipesProtocol = $serverProtocols | Where-Object { $_.ProtocolName -eq "Np" } if ($namedPipesProtocol) { $namedPipesProtocol.SetEnable() Write-Host "Named Pipes协议已成功启用" } # 重启SQL Server服务让设置生效(如果是命名实例,服务名改为MSSQL$<你的实例名>) Restart-Service -ComputerName <COMPUTER NAME> -Name "MSSQLSERVER" -Force
额外排查点(如果以上步骤没解决)
- 如果目标机器的SQL Server配置管理器都打不开,那可能是WMI Provider损坏严重,需要修复SQL Server安装:在控制面板的「程序和功能」里找到SQL Server 14,选择「更改」,然后执行「修复」操作。
- 确认你运行PowerShell的账号有足够权限:需要目标机器的管理员权限,以及SQL Server的配置管理权限。
内容的提问来源于stack exchange,提问作者Lotzi11
相关产品推荐
相关产品推荐

