Vorgehensweise: Aktivieren oder Deaktivieren eines Server-Netzwerkprotokolls (SQL Server PowerShell)

Das TCP- und das Named Pipes-Netzwerkprotokoll werden von SQL Server-Setup installiert, können jedoch nicht aktiviert werden. Netzwerkprotokolle können mithilfe der folgenden PowerShell-Skripts oder über den SQL Server-Konfigurations-Manager aktiviert oder deaktiviert werden. Damit Protokolländerungen in Kraft treten, müssen Sie SQL Server Database Engine (Datenbankmodul) beenden und neu starten.

Allgemeine Informationen zu PowerShell finden Sie unter Übersicht über SQL Server PowerShell. Weitere Informationen zum Verwalten von Protokollen über den SQL Server-Konfigurations-Manager finden Sie unter Vorgehensweise: Aktivieren oder Deaktivieren eines Server-Netzwerkprotokolls (SQL Server-Konfigurations-Manager).

Das Dienstprogramm SQL Server PowerShell (SQLPS.exe) startet eine PowerShell-Sitzung mit geladenem und registriertem SQL Server-PowerShell-Anbieter sowie geladenen und registrierten Cmdlets. Wenn Sie PowerShell (PowerShell.exe) statt SQL Server PowerShell ausführen, führen Sie zuerst die folgenden Anweisungen aus, um die erforderlichen Assemblys manuell zu laden.

# Load the assemblies
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement")

Die folgenden Skripts aktivieren Protokolle. Um die Protokolle zu deaktivieren, legen Sie die IsEnabled-Eigenschaften auf $false fest.

So aktivieren Sie ein Server-Netzwerkprotokoll mit SQL Server PowerShell

  1. Öffnen Sie eine Eingabeaufforderung unter Administratorberechtigungen.

  2. Geben Sie an der Eingabeaufforderung sqlps.exe ein, um SQL Server PowerShell zu starten.

  3. Führen Sie die folgenden Anweisungen aus, um die Protokolle für TCP und Named Pipes zu aktivieren. Ersetzen Sie <computer_name> mit dem Namen des Computers, auf dem SQL Server ausgeführt wird. Wenn Sie eine benannte Instanz konfigurieren, ersetzen Sie MSSQLSERVER durch den Instanznamen.

    $smo = 'Microsoft.SqlServer.Management.Smo.'
    $wmi = new-object ($smo + 'Wmi.ManagedComputer').
    
    # List the object properties, including the instance names.
    $Wmi
    
    # Enable the TCP protocol on the default instance.
    $uri = "ManagedComputer[@Name='<computer_name>']/ ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']"
    $Tcp = $wmi.GetSmoObject($uri)
    $Tcp.IsEnabled = $true
    $Tcp.Alter()
    $Tcp
    
    # Enable the named pipes protocol for the default instance.
    $uri = "ManagedComputer[@Name='<computer_name>']/ ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Np']"
    $Np = $wmi.GetSmoObject($uri)
    $Np.IsEnabled = $true
    $Np.Alter()
    $Np
    

So konfigurieren Sie die Protokolle für den lokalen Computer

  • Wenn das Skript lokal ausgeführt wird und den lokalen Computer konfiguriert, kann SQL Server PowerShell das Skript flexibler gestalten, indem der lokale Computernamen dynamisch festgelegt wird. Um den lokalen Computernamen abzurufen, ersetzen Sie die Zeile, die die $uri-Variable festlegt, mit der folgenden Zeile.

    $uri = "ManagedComputer[@Name='" + (get-item env:\computername).Value + "']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']"
    

So starten Sie das Datenbankmodul mit SQL Server PowerShell neu

  • Nachdem Sie Protokolle aktiviert oder deaktiviert haben, müssen Sie Database Engine (Datenbankmodul) beenden und neu starten, damit die Änderung wirksam wird. Führen Sie die folgenden Anweisungen aus, um die Standardinstanz mithilfe von SQL Server PowerShell zu beenden und zu starten. Um eine benannte Instanz zu beenden und zu starten, ersetzen Sie 'MSSQLSERVER' durch 'MSSQL$<instance_name>'.

    # Get a reference to the ManagedComputer class.
    CD SQLSERVER:\SQL\<computer_name>
    $Wmi = (get-item .).ManagedComputer
    # Get a reference to the default instance of the Database Engine.
    $DfltInstance = $Wmi.Services['MSSQLSERVER']
    # Display the state of the service.
    $DfltInstance
    # Stop the service.
    $DfltInstance.Stop();
    # Wait until the service has time to stop.
    # Refresh the cache.
    $DfltInstance.Refresh(); 
    # Display the state of the service.
    $DfltInstance
    # Start the service again.
    $DfltInstance.Start();
    # Wait until the service has time to start.
    # Refresh the cache and display the state of the service.
    $DfltInstance.Refresh(); $DfltInstance