Tags: PowerShell, Configuration-Management
PowerShell DSC ist Microsofts neueste Technologie zur zentralen Verteilung und Überwachung von Systemkonfigurationen. Dieser Beitrag zeigt an einem einfachen Beispiel (Deinstallation bzw. Deaktivierung von SMB Version 1.0), wie man eine Configuration erstellt, kompiliert und auf die Zielrechner anwendet.
Für DSC erhielt PowerShell das neue Schlüsselwort configuration. Es steht für eine spezielle function, in der man die Details von Konfigurationen in einer deklarativen Form festlegen kann (siehe dazu: Desired State Configuration (DSC): Grundlagen und Funktionsweise).
Eine configuration erlaubt wie eine function die Verwendung von Parametern, um Werte dynamisch einzufügen. Das folgende Beispiel beschränkt sich auf die grundlegenden Elemente ohne separate Configuration Data.
Configuration-Gerüst in der ISE erstellen
Eine configuration umfasst mehrere Elemente, unter anderem die Deklaration inklusive möglicher Parameter sowie die Ressourcen mit den von ihnen unterstützten Attributen. Um Tipparbeit für die Grundstruktur zu sparen, kann man mit der PowerShell ISE ein configuration-Skelett generieren.
Dafür betätigt man STRG + J und wählt aus der anschließend angezeigten Liste eines der DSC-Gerüste aus. Wir entscheiden uns hier für die Version Simple. Sie enthält zuoberst das Schlüsselwort configuration, das man um den gewünschten Namen ergänzen muss. Für dieses Beispiel wäre das DisableSMB1.
Zielsystem festlegen
Mit Hilfe von node legt man die Namen jener Rechner fest, auf welche die Konfiguration angewandt werden soll. Für jeden davon wird später eine eigene .mof-Datei generiert, deren Ausführung das Zielsystem anpasst. Das von der ISE eingefügte Skelett verwendet hier die Namen node1 bis node3.
Wir begnügen und hier mit einem Host, der WS20126-VM1 heißen soll. Im dazugehörigen Block befinden sich bereits Snippets für zwei Ressourcen, die zum Lieferumfang von Windows gehören. Es handelt sich dabei um WindowsFeature und File. Welche weiteren Ressourcen auf dem System verfügbar sind, kann man mit Get-DscResource erfragen.
Nachdem es in unserem Beispiel darum gehen soll, das SMB-Protokoll v1 zu entfernen, benötigen wir den File-Block nicht. Er dient erwartungsgemäß für diverse Dateioperationen, etwa dem Anlegen von Verzeichnissen oder dem Auslesen von Dateien.
SMB v1 über WindowsFeature deinstallieren
Möchte man nicht benötigte Features entfernen, dann nutzt man die Ressource WindowsFeature. Um zu erfahren, welche Attribute sie unterstützt, gibt man
Get-DscResource -Name WindowsFeature |
Select -ExpandProperty Properties
ein.
Neben dem Namen des Features, das entfernt werden soll, benötigen wir die Eigenschaft Ensure. Sie stellt über die Werte Present und Absent sicher, dass ein Feature vorhanden bzw. abwesend ist, also bei Bedarf installiert oder entfernt wird. Den Namen des Features ermittelt man durch Eingabe von
Get-WindowsFeature -Name *SMB*
Die angepasste configuration würde nun so aussehen:
SMB v1 in Windows 10 entfernen
Führt man den Befehl auf einer Workstation aus, dann wird man schnell feststellen, dass dort das Cmdlet Get-WindowsFeature nicht zur Verfügung steht. Die Ressource WindowsFeature existiert zwar unter Windows 10, aber beim Ausführen der .mof-Datei setzt es dann eine Fehlermeldung.
Daher muss man auf Client-Systemen stattdessen die Ressource WindowsOptionalFeature verwenden. Wie der Aufruf von
Get-DscResource -Name WindowsOptionalFeature |
Select -ExpandProperty Properties
zeigt, nimmt die Eigenschaft Ensure dort die Werte Enable und Disable an.
Und während SMBv1 auf dem Server FS-SMB1 heißt, nennt sich das Feature auf einer Workstation SMB1Protocol, wie man mit diesem Befehl herausfinden kann:
Get-WindowsOptionalFeature -Online -FeatureName *smb*
Die configuration müsste für Windows 10 dann so angepasst werden:
Registry-Eintrag für Windows 7 und Server 2008 R2
SMB v1 lässt sich nur ab Windows 8.1 und Server 2012 R2 als eigenes Feature deinstallieren. Auf älteren Systemen kann man es sich durch einen Eintrag in der Registrierdatenbank abschalten. Auch diese Aufgabe übernimmt DSC.
Zu diesem Zweck bemüht man die Ressource Registry, die ebenfalls zum Lieferumfang des OS gehört.
Sie erwartet mindestens die Eingabe von Werten für die Eigenschaften Key und ValueName.
Über den Wert Present für Ensure stellt man sicher, dass der Wert in der Registry eingetragen wird, falls er noch nicht existiert.
.mof-Datei erzeugen
Möchte man nun eine der obigen Konfigurationen anwenden, dann führt man das Script aus und lädt damit die Konfiguration DisbaleSMB1 in den Speicher. Wenn man sie nun wie eine function mit
DisbaleSMB1
aufruft, dann erzeugt sie für jeden Node eine eigene .mof-Datei, und zwar im Unterverzeichnis DisbaleSMB1.
Konfiguration anwenden
Diese Aufgabe übernimmt beim Push-Modell Start-DscConfiguration. Es erwartet den Pfad zu dem Verzeichnis, in dem sich die .mof-Dateien befinden. Aufgrund ihres Namens stellt das Cmdlet selbständig fest, welche Datei zu welchem Rechner gehört:
Start-DscConfiguration -Path .\DisableSMB1
Dieses Kommando startet den Vorgang als Job im Hintergrund und arbeitet dabei die Konfiguration jener .mof-Datei ab, die zum Namen des lokalen Rechners passt. Das Cmdlet akzeptiert aber den Parameter Computername, so dass man Konfigurationen auch remote anwenden kann.
Läuft der Befehl im Hintergrund und es tritt ein Fehler auf, dann sieht man mit Get-Job in der Spalte State nur den Eintrag Failed. In diesem Fall empfiehlt es sich, das Cmdlet erneut mit den zusätzlichen Schaltern -Wait -Force -Verbose zu starten.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- winget erhält PowerShell-Modul und Configuration Management
- Desired State Configuration: Zielsysteme festlegen mit ConfigurationData
- Desired State Configuration: Nodes und configuration mit Parametern anpassen
- Test-DscConfiguration, DSCEA: Konfiguration von PCs remote überprüfen
- Desired State Configuration (DSC): Grundlagen und Funktionsweise
Weitere Links