Dbatools als Ersatz für den SQL Server Configuration Manager

dbatools

Die Kontrolle oder Anpassung der Netzwerkkonfiguration eines Microsoft SQL Servers ist für viele Administrator:innen immer noch ein Grund, sich per RDP auf den Server selbst zu verbinden und dort den SQL Server Configuration Manager zu starten. Aber dazu gibt es seit kurzem eine Alternative, denn ich habe dem PowerShell-Modul dbatools zwei neue Befehle spendiert.

Kleine Übersicht über die grafischen Oberflächen  

Da wäre zunächst das SQL Server Management Studio, das sicher hauptsächlich zur Administration verwendet wird. Es ist ein eigenständiges Programm, das auf genau dem Rechner installiert werden kann, von dem aus die Administration durchgeführt werden soll. Selbstverständlich sollte dies nicht der Server selbst sein, sondern ein zentraler Administrationsserver oder der Arbeitsplatzrechner des:der Administrators:in.

Zusätzlich gibt es noch den SQL Server Configuration Manager, dessen Eintrag im Startmenü von Windows man am schnellsten findet, wenn man nach dem roten Werkzeugkoffer Ausschau hält. Es handelt sich hierbei aber gar nicht um ein Programm, sondern lediglich um ein Snap-In für die MMC, die Microsoft Management Console. Genau hier liegt das Problem: Das Snap-In steht eben nur auf dem SQL Server selbst zur Verfügung.

WMI – Windows Management Instrumentation  

Der SQL Server Configuration Manager nutzt das Windows Management Instrumentation, kurz WMI, zur Kommunikation mit dem Betriebssystem und damit zur Anzeige und Aktualisierung der Informationen.

Microsoft stellt in der Datei Microsoft.SqlServer.SqlWmiManagement.dll die .NET-Klasse Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer zur Verfügung, die sehr einfach auch innerhalb von PowerShell dazu verwendet werden kann, um die Aufgaben des SQL Server Configuration Managers zu übernehmen. Ich habe dazu hier den notwendigen Code erläutert.

Get-DbaNetworkConfiguration zur Anzeige des aktuellen Zustands  

Damit es für die User des PowerShell-Moduls dbatools noch einfacher ist, habe ich dort vor kurzem den Befehl Get-DbaNetworkConfiguration ergänzt, der einen Großteil der im Configuration Manager dargestellten Informationen über die .NET-Klasse ausliest und als PowerShell-Objekt zurückgibt.  

PS C:\> Get-DbaNetworkConfiguration -SqlInstance SRV1\SQL2017

ComputerName        : SRV1
InstanceName        : SQL2017
SqlInstance         : SRV1\SQL2017
SharedMemoryEnabled : True
NamedPipesEnabled   : False
TcpIpEnabled        : True
TcpIpProperties     : @{Enabled=True; KeepAlive=30000; ListenAll=True}
TcpIpAddresses      : {@{Name=IP1; Active=True; Enabled=False; IpAddress=fe80::5826:15a1:9f9c:55e3%6; TcpDynamicPorts=0; TcpPort=}, 
                      @{Name=IP2; Active=True; Enabled=False; IpAddress=192.168.3.51; TcpDynamicPorts=0; TcpPort=}, @{Name=IP3; 
                      Active=True; Enabled=False; IpAddress=192.168.3.70; TcpDynamicPorts=0; TcpPort=}, @{Name=IP4; Active=True; 
                      Enabled=False; IpAddress=fe80::509b:39b9:c7d3:f6c%5; TcpDynamicPorts=0; TcpPort=}...} 

Wie auch im Configuration Manager hat die Rückgabe eine geschachtelte Struktur, was die Darstellung aller Informationen nicht immer übersichtlich gestaltet.

Wenn nur Teilinformationen benötigt werden, so kann die Ausgabe des Befehls mit Hilfe des Parameters OutputType angepasst werden. Dabei stehen neben der Voreinstellung Full noch die Optionen ServerProtocols, TcpIpProperties und TcpIpAddresses zur Verfügung.

PS C:\> Get-DbaNetworkConfiguration -SqlInstance SRV1\SQL2017 -OutputType ServerProtocols

ComputerName        : SRV1
InstanceName        : SQL2017
SqlInstance         : SRV1\SQL2017
SharedMemoryEnabled : True
NamedPipesEnabled   : False
TcpIpEnabled        : True 

Die Option ServerProtocols gibt dabei nur für jedes der drei unterstützen Protokolle an, ob es aktiviert (True) oder deaktiviert (False) ist.  

PS C:\> Get-DbaNetworkConfiguration -SqlInstance SRV1\SQL2017 -OutputType TcpIpProperties

ComputerName : SRV1
InstanceName : SQL2017
SqlInstance  : SRV1\SQL2017
Enabled      : True
KeepAlive    : 30000
ListenAll    : True 

Die Option TcpIpProperties liefert die Eigenschaften des TCP/IP-Protokolls zurück. Wichtig ist hierbei insbesondere der Parameter ListenAll. Dieser gibt an, ob der SQL Server auf allen vorhandenen IP-Adressen Verbindungen entgegennimmt oder nur auf einzelnen Adressen. Der Standardwert ist True, dieser sollte auch nur in speziellen Situationen umgestellt werden.  

PS C:\> Get-DbaNetworkConfiguration -SqlInstance SRV1\SQL2017 -OutputType TcpIpAddresses

ComputerName    : SRV1
InstanceName    : SQL2017
SqlInstance     : SRV1\SQL2017
Name            : IPAll
TcpDynamicPorts : 49919
TcpPort         : 

Die Option TcpIpAddresses liefert Informationen zu den verwendeten IP-Adressen. Wenn der TCP/IP-Parameter ListenAll auf dem Standardwert True steht, dann werden hier nur die Informationen für den Eintrag mit dem Namen IPAll angezeigt, da die anderen Einträge nicht aktiv sind.  

Set-DbaNetworkConfiguration zur Anpassung der Konfiguration  

Zur komfortablen Änderung der Netzwerkkonfiguration steht der Befehl Set-DbaNetworkConfiguration zur Verfügung. Dieser bietet zum einen die Möglichkeit, eine Struktur mit allen Konfigurationseinstellungen entgegenzunehmen, wie sie der Befehl Get-DbaNetworkConfiguration liefert. Dazu möchte ich an dieser Stelle nur auf das Beispiel in der Dokumentation verweisen. Zum anderen stehen die Parameter EnableProtocol und DisableProtocol sowie DynamicPortForIPAll und StaticPortForIPAll zur Verfügung, die ich im Folgenden vorstellen möchte.  

PS C:\> Set-DbaNetworkConfiguration -SqlInstance SRV1\SQL2017 -DisableProtocol SharedMemory
WARNING: [10:28:50][Set-DbaNetworkConfiguration] A restart of the service for instance SQL2017 on SRV1 is needed for the changes to take effect.

ComputerName  : SRV1
InstanceName  : SQL2017
SqlInstance   : SRV1\SQL2017
Changes       : {Changed SharedMemoryEnabled to False}
RestartNeeded : True
Restarted     : False 

Hier wird der Befehl zur Deaktivierung des Shared-Memory-Protokolls dargestellt. Da ich den Parameter RestartService nicht verwendet habe, werde ich durch eine Warnmeldung und zusätzlich durch die Rückgabe darauf hingewiesen, dass ein Neustart erforderlich ist, um die Änderung umzusetzen.  

PS C:\> Set-DbaNetworkConfiguration -SqlInstance SRV1\SQL2017 -StaticPortForIPAll 51433 -RestartService

ComputerName  : SRV1
InstanceName  : SQL2017
SqlInstance   : SRV1\SQL2017
Changes       : {Changed TcpDynamicPorts for IPAll to , Changed TcpPort for IPAll to 51433}
RestartNeeded : True
Restarted     : True 

Bei der Umstellung auf einen statischen Port habe ich den Parameter RestartService verwendet, woraufhin der Dienst des SQL Servers neu gestartet wurde und die Änderung damit komplett umgesetzt wurde.  

Kleiner Ausblick auf die Steuerung der Dienste  

Der SQL Server Configuration Manager wird natürlich nicht nur zur Verwaltung der Netzwerkkonfiguration, sondern vielfach auch zur Verwaltung der verschiedenen Dienste des SQL Servers verwendet. Dazu stehen aber schon seit langem unter anderem diese Befehle zur Verfügung:

Falls etwas fehlt...  

Falls Sie noch weitere Funktionalitäten des SQL Server Configuration Managers in den dbatools vermissen, so sprechen Sie uns gerne an. Erstellen Sie dazu entweder ein Feature Request auf GitHub oder schreiben Sie uns einfach eine E-Mail: Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!

By accepting you will be accessing a service provided by a third-party external to https://blog.ordix.de/