求可用PowerShell脚本修改SQL Server TCP IPALL端口及SSMS配置
解决PowerShell修改SQL Server TCP IPAll端口的路径错误问题
核心排查方向
- SMO组件版本匹配:使用
SqlServer模块替代已弃用的SQLPS模块,确保模块版本与SQL Server版本兼容(例如SQL Server 2019对应SqlServer模块21.x版本)。 - 实例名称准确性:默认实例名称为
MSSQLSERVER,命名实例需填写准确名称(如SQL2019);本地服务器可使用.或localhost。 - 运行权限:必须以管理员身份启动PowerShell,修改SQL Server网络配置需要系统级权限。
- WMI路径验证:先列出服务器上的所有实例与协议,确认目标实例和TCP协议存在:
Import-Module SqlServer $managedComputer = New-Object Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer "." # 列出所有实例 $managedComputer.ServerInstances | Select-Object Name # 列出实例的所有协议 $managedComputer.ServerInstances["MSSQLSERVER"].ServerProtocols | Select-Object Name, IsEnabled
修正后的可运行脚本
# 加载官方推荐的SqlServer模块(替代旧版SQLPS) Import-Module SqlServer -ErrorAction Stop param( [string]$ServerName = $(Read-Host -Prompt "输入服务器名称(本地用.或localhost)"), [string]$InstanceName = "MSSQLSERVER", [string]$TargetPort = "14330" ) try { # 初始化WMI管理对象 $managedComputer = New-Object Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer $ServerName # 定位目标SQL实例 $serverInstance = $managedComputer.ServerInstances | Where-Object { $_.Name -eq $InstanceName } if (-not $serverInstance) { throw "未找到指定实例: $InstanceName" } # 定位TCP协议 $tcpProtocol = $serverInstance.ServerProtocols | Where-Object { $_.Name -eq "Tcp" } if (-not $tcpProtocol) { throw "实例 $InstanceName 未配置TCP协议" } # 启用TCP协议(若未启用) if (-not $tcpProtocol.IsEnabled) { $tcpProtocol.IsEnabled = $true $tcpProtocol.Alter() Write-Host "已启用TCP协议" } # 定位IPAll配置节点 $ipAll = $tcpProtocol.IPAddresses | Where-Object { $_.Name -eq "IPAll" } if (-not $ipAll) { throw "未找到IPAll配置项" } # 修改静态端口并清空动态端口 $ipAll.IPAddressProperties['TcpPort'].Value = $TargetPort $ipAll.IPAddressProperties['TcpDynamicPorts'].Value = "" # 提交配置更改 $tcpProtocol.Alter() Write-Host "IPAll端口已成功修改为: $TargetPort" # 必须重启服务生效 Write-Host "请手动重启SQL Server服务 '$InstanceName' 使配置生效" } catch { Write-Error "执行失败: $_" }
后续验证与SSMS连接说明
- 验证配置:打开SQL Server配置管理器,依次进入「SQL Server网络配置」→「<实例名>的协议」→「TCP/IP」→「IP地址」,检查IPAll的「TCP端口」是否已更新。
- 生效步骤:重启对应的SQL Server服务后,使用
Test-NetConnection $ServerName -Port $TargetPort测试端口连通性。 - SSMS连接:SSMS本身无需修改配置,连接时在服务器名称后添加端口号即可(例如
localhost,14330)。
内容的提问来源于stack exchange,提问作者Midnite
相关产品推荐
相关产品推荐

