Gerenciar serviços e configurações de rede com o provedor WMI
Aplica-se a: SQL Server 2022 (16.x)
O provedor WMI é uma interface publicada usada pelo MMC (Console de Gerenciamento Microsoft) para gerenciar os serviços e protocolos de rede do SQL Server. No SMO, o ManagedComputer objeto representa o provedor WMI.
O ManagedComputer objeto opera independentemente da conexão estabelecida com o Server objeto para uma instância do SQL Server e usa credenciais do Windows para se conectar ao serviço WMI.
Exemplos
Para usar qualquer exemplo de código fornecido, escolha o ambiente de programação, o modelo e a linguagem na qual criar seu aplicativo. Para obter mais informações, consulte Como criar um projeto SMO do Visual C# no Visual Studio .NET.
Para programas que usam o provedor WMI do SQL Server, você deve incluir a Imports
instrução para qualificar o namespace WMI. Insira a instrução após outras instruções Imports
, antes de qualquer declaração no aplicativo, como:
Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer.Management.Common
Imports Microsoft.SqlServer.Management.Smo.Wmi
Parar e reiniciar o serviço SQL Server no Visual Basic
Este exemplo de código mostra como interromper e iniciar serviços usando o objeto ManagedComputer SMO. Isso fornece uma interface para o provedor WMI para Gerenciamento de Configuração.
'Declare and create an instance of the ManagedComputer object that represents the WMI provider services.
Dim mc As ManagedComputer
mc = New ManagedComputer()
'Iterate through each service registered with the WMI provider.
Dim svc As Service
For Each svc In mc.Services
Console.WriteLine(svc.Name)
Next
'Reference the SQL Server service.
svc = mc.Services("MSSQLSERVER")
'Stop the service if it is running and report on the status continuously until it has stopped.
If svc.ServiceState = ServiceState.Running Then
svc.Stop()
Console.WriteLine(String.Format("{0} service state is {1}", svc.Name, svc.ServiceState))
Do Until String.Format("{0}", svc.ServiceState) = "Stopped"
Console.WriteLine(String.Format("{0}", svc.ServiceState))
svc.Refresh()
Loop
Console.WriteLine(String.Format("{0} service state is {1}", svc.Name, svc.ServiceState))
'Start the service and report on the status continuously until it has started.
svc.Start()
Do Until String.Format("{0}", svc.ServiceState) = "Running"
Console.WriteLine(String.Format("{0}", svc.ServiceState))
svc.Refresh()
Loop
Console.WriteLine(String.Format("{0} service state is {1}", svc.Name, svc.ServiceState))
Else
Console.WriteLine("SQL Server service is not running.")
End If
Habilitar um protocolo de servidor usando uma cadeia de caracteres URN no Visual Basic
O exemplo de código mostra como identificar um protocolo de servidor usando um objeto URN e, em seguida, habilita o protocolo.
'This program must run with administrator privileges.
'Declare the ManagedComputer WMI interface.
Dim mc As New ManagedComputer()
'Create a URN object that represents the TCP server protocol.
Dim u As New Urn("ManagedComputer[@Name='V-ROBMA3']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']")
'Declare the serverProtocol variable and return the ServerProtocol object.
Dim sp As ServerProtocol
sp = mc.GetSmoObject(u)
'Enable the protocol.
sp.IsEnabled = True
'propagate back to the service
sp.Alter()
Habilitar um protocolo de servidor usando uma cadeia de caracteres URN no PowerShell
O exemplo de código mostra como identificar um protocolo de servidor usando um objeto URN e, em seguida, habilita o protocolo.
#This example shows how to identify a server protocol using a URN object, and then enable the protocol
#This program must run with administrator privileges.
#Load the assembly containing the classes used in this example
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement")
#Get a managed computer instance
$mc = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer
#Create a URN object that represents the TCP server protocol
#Change 'MyPC' to the name of the your computer
$urn = New-Object -TypeName Microsoft.SqlServer.Management.Sdk.Sfc.Urn -argumentlist "ManagedComputer[@Name='MyPC']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']"
#Get the protocol object
$sp = $mc.GetSmoObject($urn)
#enable the protocol on the object
$sp.IsEnabled = $true
#propagate back to actual service
$sp.Alter()
Iniciar e parar um serviço em C#
O exemplo de código mostra como parar e iniciar uma instância do SQL Server.
//Declare and create an instance of the ManagedComputer
//object that represents the WMI provider services.
ManagedComputer mc;
mc = new ManagedComputer();
//Iterate through each service registered with the WMI provider.
foreach (Service svc in mc.Services)
{
Console.WriteLine(svc.Name);
}
//Reference the SQL Server service.
Service mySvc = mc.Services["MSSQLSERVER"];
//Stop the service if it is running and report on the status
// continuously until it has stopped.
if (mySvc.ServiceState == ServiceState.Running)
{
mySvc.Stop();
Console.WriteLine(string.Format("{0} service state is {1}", mySvc.Name, mySvc.ServiceState));
while (!(string.Format("{0}", mySvc.ServiceState) == "Stopped"))
{
Console.WriteLine(string.Format("{0}", mySvc.ServiceState));
mySvc.Refresh();
}
Console.WriteLine(string.Format("{0} service state is {1}", mySvc.Name, mySvc.ServiceState));
//Start the service and report on the status continuously
//until it has started.
mySvc.Start();
while (!(string.Format("{0}", mySvc.ServiceState) == "Running"))
{
Console.WriteLine(string.Format("{0}", mySvc.ServiceState));
mySvc.Refresh();
}
Console.WriteLine(string.Format("{0} service state is {1}", mySvc.Name, mySvc.ServiceState));
Console.ReadLine();
}
else
{
Console.WriteLine("SQL Server service is not running.");
Console.ReadLine();
}
Iniciar e parar um serviço no PowerShell
O exemplo de código mostra como parar e iniciar uma instância do SQL Server.
#Load the assembly containing the objects used in this example
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement")
#Get a managed computer instance
$mc = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer
#List out all SQL Server instances running on this mc
foreach ($Item in $mc.Services) { $Item.Name }
#Get the default SQL Server database engine service
$svc = $mc.Services["MSSQLSERVER"]
# for stopping and starting services PowerShell must run as administrator
#Stop this service
$svc.Stop()
$svc.Refresh()
while ($svc.ServiceState -ne "Stopped") {
$svc.Refresh()
$svc.ServiceState
}
"Service" + $svc.Name + " is now stopped"
"Starting " + $svc.Name
$svc.Start()
$svc.Refresh()
while ($svc.ServiceState -ne "Running") {
$svc.Refresh()
$svc.ServiceState
}
$svc.ServiceState
"Service" + $svc.Name + "is now started"