Ab der Powershell Version 4 wird DSC unterstützt. Ich nutze Windows 10 und habe es standardmäßig on Board. Vorbereitung: Download der individuell benötigten Module aus der Powershell Gallery https://www.powershellgallery.com/items Herunterladen und installieren der Module: Save-Module -Name PSDscResources -Path C:\DSC\Module Install-Module -Name PSDscResources Save-Module -Name xpsdesiredstateconfiguration -Path C:\DSC\Module Install-Module -Name xpsdesiredstateconfiguration
Mit dem Befehl Find-DscResource fragen wir online die verfügbaren Module ab. Mit dem Befehl Install-Module Name OctopusDSC Scope AllUsers Force; laden wir das Module herunter und installieren es anschließend.
Nach dem Import finden wir die Module unter C:\Program Files\WindowsPowerShell\Modules Folgende Warnung erscheint, wenn das eingesetzte Modul nicht importiert wird. DSC Module sind keine CMD-Lets und können nur in Script-Blocks eingesetzt werden. Fangen wir damit an zu überprüfen ob eine Datei vorhanden ist.
Nach dem Import des Moduls taucht die Fehlermeldung nicht mehr auf. Das erstelle (kompilierte).mof (Managed Object Format) File hat folgenden Inhalt und wird später dem DSC Agent LCM (Local Configuration Manager) zur Verarbeitung übergeben.
Start-DscConfiguration -wait -verbose -force -Path C:\DSC\NDSEDV Der LCM Agent hat das erstellte.mof File verarbeitet und folgendes Ergebnis ausgegeben: Das Zielobjekt wurde gefunden Sollte eine Fehlermeldung erscheinen ist in der Regel der Windows Remote Management Dienst einzuschalten (WINRM), verzögerter Start. Powershell: configuration ndsedv param () Import-DscResource ModuleName PSDesiredStateConfiguration ; File WindowsUpdateLog DestinationPath = 'C:\Windows\WindowsUpdate.log'; Ensure = 'Present'; mkdir -Path C:\DSC\NDSEDV; NDSEDV -OutputPath C:\DSC\NDSEDV; Start-DscConfiguration -wait -verbose -force -Path C:\DSC\NDSEDV
Suche ich nun nach der Datei C:\Windows\WindowsUpdate1.log erhalte ich eine Fehlermeldung. Logisch denn diese existiert nicht. Außerdem fehlt der Wert Contents zur Erstellung einer neuen Datei. Verändere ich den Code und sage aus, das diese Datei existieren muss wird diese neue erstellt und zwar mit dem Inhalt DerWindowsPapst.
Der LCM ist ein integraler Bestandteil der Powershell und kann individuell angepasst werden. Die aktuellen Settings lesen wir mit diesem Befehl aus: Get-DscLocalConfigurationManager
Eine neue LCM Konfiguration könnte so aussehen: [DSCLocalConfigurationManager()] configuration LCMConfig Node localhost Settings RefreshMode = 'Push' # Alternative: 'Pull' ConfigurationMode = 'ApplyAndMonitor' # Alternative: 'ApplyOnly', 'ApplyAndAutoCorrect' ConfigurationModeFrequencyMins = '30' RefreshFrequencyMins = '45' LCMconfig Jetzt muss die neue Konfiguration kompiliert werden. Script-Block ausführen und danach den Befehl LCMConfig starten.
Die meta.mof Datei wurde erstellt.
Damit die neue Konfiguration übernommen wird muss diese auch gesetzt werden. Der Befehl dazu lautet: Set-DscLocalConfigurationManager -Path C:\DSC\NDSEDV\LCMConfig -Force -Verbose Fragen wir die Konfiguration erneut ab müssten die Settings übernommen worden sein.
Nächstes Beispiel: Einen Ordner auf Vorhandensein überprüfen, wenn nicht anlegen lassen. An diesem Beispiel sehen wir die Vorgehensweise etwas detaillierter, welche Blöcke in welcher Reihenfolge ausgeführt werden müssen. Configuration Ordner Import-DscResource ModuleName PSDesiredStateConfiguration ; Node Worker File OrdnerDemo Type = 'Directory' DestinationPath = 'F:\Archiv' Ensure = "Present" Ordner -OutputPath C:\DSC\Ordner; Start-DscConfiguration -wait -verbose -force -Path C:\DSC\Ordner
Eine erneute Überprüfung ob der Ordner vorhanden ist:
Nächstes Beispiel: Eine Datei von Source nach Destination kopieren. Configuration Dateikopieren Import-DscResource ModuleName PSDesiredStateConfiguration ; Node Worker File Datei DestinationPath = 'E:\Archiv\Testdatei_kopiert.txt' SourcePath = "F:\Archiv\Testdatei.txt" Ensure = "Present" Force = $true MatchSource = $true Dateikopieren -OutputPath C:\DSC\Dateikopieren; Start-DscConfiguration -wait -verbose -force -Path C:\DSC\Dateikopieren
Nächstes Beispiel: Dateien kopieren und Dienst wieder starten. Ein Dienst kann nur einmal in einem Skriptblock aufgeführt werden. Entweder zum Starten oder stoppen.
Configuration MeinService Import-DscResource ModuleName PSDesiredStateConfiguration ; Node "localhost" File Dateienkopieren SourcePath = "F:\Archiv" DestinationPath = "E:\Archiv" Recurse = $True Force = $true MatchSource = $true Ensure = "Present" Service StartService Name = "Spooler" State = "Running" DependsOn = "[File]Dateienkopieren" MeinService -OutputPath C:\DSC\MeinService; Start-DscConfiguration -wait -verbose -force -Path C:\DSC\MeinService Nächstes Beispiel: Remote Installation eines Server Feature (XPS-Viewer). Aktuell ist das Feature nicht installiert.
Installiere das Feature und erstelle ein.meta File.
Der XPS-Viewer ist installiert. Auf dem Zielsystem (SRV00) können wir die DSC Konfiguration und den Status abfragen. Get-DscConfigurationStatus Get-DscConfiguration
Nächstes Beispiel: Remote Installation eines Server Feature (IIS). Aktuell ist das Feature nicht installiert. Powershell-Skript: Enable-PSRemoting Force Configuration IIS Import-DscResource ModuleName PSDesiredStateConfiguration ; Node "SRV01" LocalConfigurationManager RebootNodeIfNeeded = $True ConfigurationMode = "ApplyAndAutoCorrect" ConfigurationModeFrequencyMins = 15 WindowsFeature Web-Server Ensure = "Present" Name = "Web-Server" IIS -OutputPath "C:\DSC\IIS" Start-DscConfiguration -Path "C:\DSC\IIS" -Wait -Force -Verbose
Der IIS wurde erfolgreich installiert. Das LOG zur Installation des IIS:
Sollte ein Modul mal nicht installiert sein, wird dieses auch direkt als Fehler markiert, wie in diesem Beispiel: Nach der Installation des Moduls:
Als nächstes deaktivieren wir mithilfe einer Konfigurationsdatei die verstärkte Sicherheit des Internet Explorers. Voraussetzung ist, dass auf den Servern der IE (Role) installiert ist. Die Ausgangssituation zeigt, dass die verstärkte Sicherheit eingeschaltet ist: Der Inhalt der ConfigData.psd1 @ AllNodes = @( @ NodeName = "SRV01" Role = "IE" ); Es können viele beliebige Nodes eingefügt werden. Auf Basis der enthaltenen NodeNames wird für jede Maschine eine separate.mof Datei erstellt.
Erzeuge das Powershell Skript sowie eine configdata.psd1 Datei. Powershell-Skript: Configuration EnableIEEsc Import-DSCResource -Module xsystemsecurity -Name xieesc; Import-DscResource ModuleName PSDesiredStateConfiguration ; Node $AllNodes.where $_.Role.Contains("IE").NodeName xieesc EnableIEEscAdmin IsEnabled = $false UserRole = "Administrators" xieesc EnableIEEscUser IsEnabled = $false UserRole = "Users" EnableIEEsc -ConfigurationData "configdata.psd1" Start-DscConfiguration -Path.\EnableIEEsc -Verbose -Wait -Force
Das Ergebnis: Die verstärkte Sicherheit ist ausgeschaltet. In Kürze geht es weiter Get-DscResource Select-Object -Property Name, Properties Get-Command -Module PSDesiredStateConfiguration Select-Object -Property CommandType, Name