我正在尝试编写一个PowerShell脚本,该脚本将启用TCP / IP和命名管道服务器协议,但我的服务器无法找到它们。这是我用来连接协议的代码。
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement")
$wmi = new-object ('Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer')
$uri = "ManagedComputer[@Name='<computer_name>']/ ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']"
$Tcp = $wmi.GetSmoObject($uri)
$Tcp.IsEnabled = $true
$Tcp.Alter()
问题来自GetSmoObject cmdlet,我收到以下错误:
当我将$ uri变量设置为以下时运行GetSmoObject:
$uri = "ManagedComputer[@Name='<computer_name>']"
我得到以下结果:
我的服务器无法找到服务器实例或客户端协议,即使我知道它们存在。
有谁知道如何设置我的服务器,以便它可以检测我需要更新的服务器协议?
答案 0 :(得分:0)
dbatools在这个模块中有很多非常好的命令。
希望这会让你开始
客户端协议设置: https://dbatools.io/functions/get-dbaclientprotocol/
服务器协议设置:https://dbatools.io/functions/get-dbaserverprotocol/
答案 1 :(得分:0)
是的,使用&#34; Microsoft.SqlServer.SqlWmiManagement&#34;名称空间:
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement") | Out-Null
您将创建一台新机器&#34; ManagedComputer类型的级别对象。那将包含该机器上的所有实例:
$machine = New-Object 'Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer' -ArgumentList 'deezNutz'
$machine.ServerInstances.ServerProtocols | Select DisplayName, State, IsEnabled
请记住,ServerInstances
是一组实例。如果计算机承载多个实例,则您需要引用所需的实例。为了简单起见,我假设机器有一个默认实例。
现在,如果要禁用协议。只需将该属性设置为$False
并退回实例。
$machine.ServerInstances.ServerProtocols.Item(0).IsEnabled = $True
现在在此处显示,但您可以通过Restart-Service
循环实例。