![有没有办法通过 powershell 脚本或 sql 脚本启用 tcp/ip 协议?](https://linux22.com/image/1582848/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E9%80%9A%E8%BF%87%20powershell%20%E8%84%9A%E6%9C%AC%E6%88%96%20sql%20%E8%84%9A%E6%9C%AC%E5%90%AF%E7%94%A8%20tcp%2Fip%20%E5%8D%8F%E8%AE%AE%EF%BC%9F.png)
上下文:我得到了一个 Vagrantfile 来配置虚拟机,该虚拟机安装了 SQL-SERVER 2012、2014、2016 和 2017。当我检查 SQL SERVER 配置管理器时,我发现每个 SQL-SERVER 实例都禁用了 TCP/IP 协议。
有没有办法通过 powershell 脚本或 sql 脚本启用它们?
答案1
微软已经针对此主题提供了指导。
使用 SQL Server PowerShell
使用以下方法启用服务器网络协议
- 使用管理员权限打开命令提示符。
- 从任务栏启动 Windows PowerShell,或者单击“开始”、“所有程序”、“附件”、“Windows PowerShell”和“Windows PowerShell”。
- 通过输入 Import-Module "sqlps" 来导入 sqlps 模块
- 执行以下语句以启用 TCP 和命名管道协议。将 <computer_name> 替换为运行 SQL Server 的计算机的名称。如果要配置命名实例,请将 MSSQLSERVER 替换为实例名称。要禁用协议,请将 IsEnabled 属性设置为 $false。
$smo = 'Microsoft.SqlServer.Management.Smo.'
$wmi = new-object ($smo + 'Wmi.ManagedComputer').
列出对象属性,包括实例名称。
$Wmi
在默认实例上启用 TCP 协议。
$uri = "ManagedComputer[@Name='<computer_name>']/ ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']"
$Tcp = $wmi.GetSmoObject($uri)
$Tcp.IsEnabled = $true
$Tcp.Alter()
$Tcp
为默认实例启用命名管道协议。
$uri = "ManagedComputer[@Name='<computer_name>']/ ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Np']"
$Np = $wmi.GetSmoObject($uri)
$Np.IsEnabled = $true
$Np.Alter()
$Np
答案2
我还没有弄清楚如何迭代安装在同一台机器上的多个实例,但是这是一个脚本为命名实例启用 TCP 和命名管道。
答案3
可以直接从 SQL Server 配置管理器中启用 SQL Server 中的 TCP/IP 协议,方法是展开“SQL Server 网络配置”,然后展开“MSSQLSERVER 的协议”。
右键单击“TCP/IP”并选择“启用”,然后右键单击“SQL Server (MSSQLSERVER)”并选择“重新启动”。
有关 PowerShell 脚本,请参阅 Microsoft 文章 启用或禁用服务器网络协议。