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

使用PowerShell配置SQL Server 2016/2019的1433端口GetSmoObject报错如何解决

报错原因
  • $dbmsName取值类型错误:Invoke-Sqlcmd -Query "SELECT @@servicename"返回的是DataRow对象,而非字符串类型的实例名,直接拼接进URI会导致路径匹配失败
  • 运行权限不足:修改SQL Server WMI配置必须以管理员身份启动PowerShell会话,否则无权限读取WMI对象
  • URI格式错误:原脚本中URI定义存在换行,会额外插入空格导致WMI对象路径无效
  • 依赖组件缺失:系统未安装SQL Server WMI提供程序(属于SQL Server管理工具配套组件,未安装时无法初始化ManagedComputer对象)
修复后的完整脚本
$pcName = $env:COMPUTERNAME
# 显式提取实例名字符串
$dbmsName = (Invoke-Sqlcmd -Query "SELECT @@servicename").Column1

# 加载SQLPS模块
Import-Module SQLPS -DisableNameChecking -Force

# 初始化WMI对象
$Wmi = New-Object ('Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer') $pcName

# 无换行拼接正确URI
$uri = "ManagedComputer[@Name='$pcName']/ServerInstance[@Name='$dbmsName']/ServerProtocol[@Name='Tcp']"

# 获取TCP配置对象
$Tcp = $wmi.GetSmoObject($uri)
$Tcp.IsEnabled = $true

# 配置IPAll端口为1433
$wmi.GetSmoObject($uri + "/IPAddress[@Name='IPAll']").IPAddressProperties[1].Value="1433"

# 保存配置
$Tcp.Alter()

# 重启SQL服务
Restart-Service -Name MSSQL* -Force
Start-Sleep -s 30
可选排查步骤

如果修复后仍报错,可先执行以下命令验证基础配置:

  • 列出当前服务器所有可识别的SQL实例:$Wmi.ServerInstances | Select-Object Name,确认返回的实例名和$dbmsName取值一致
  • 确认系统WMI服务正常运行:Get-Service -Name winmgmt | Select-Object Status

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:36:03