View
42
Download
0
Category
Preview:
Citation preview
Powershell DSC – Desired State Configuration
Erstellt von Jörn Walter www.der-windows-papst.de – 04.04.2017
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
Powershell DSC – Desired State Configuration
Erstellt von Jörn Walter www.der-windows-papst.de – 04.04.2017
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.
Powershell DSC – Desired State Configuration
Erstellt von Jörn Walter www.der-windows-papst.de – 04.04.2017
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.
Powershell DSC – Desired State Configuration
Erstellt von Jörn Walter www.der-windows-papst.de – 04.04.2017
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.
Powershell DSC – Desired State Configuration
Erstellt von Jörn Walter www.der-windows-papst.de – 04.04.2017
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
Powershell DSC – Desired State Configuration
Erstellt von Jörn Walter www.der-windows-papst.de – 04.04.2017
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“.
Powershell DSC – Desired State Configuration
Erstellt von Jörn Walter www.der-windows-papst.de – 04.04.2017
Der LCM ist ein integraler Bestandteil der Powershell und kann individuell angepasst
werden.
Die aktuellen Settings lesen wir mit diesem Befehl aus:
Get-DscLocalConfigurationManager
Powershell DSC – Desired State Configuration
Erstellt von Jörn Walter www.der-windows-papst.de – 04.04.2017
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.
Powershell DSC – Desired State Configuration
Erstellt von Jörn Walter www.der-windows-papst.de – 04.04.2017
Die meta.mof Datei wurde erstellt.
Powershell DSC – Desired State Configuration
Erstellt von Jörn Walter www.der-windows-papst.de – 04.04.2017
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.
Powershell DSC – Desired State Configuration
Erstellt von Jörn Walter www.der-windows-papst.de – 04.04.2017
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
Powershell DSC – Desired State Configuration
Erstellt von Jörn Walter www.der-windows-papst.de – 04.04.2017
Eine erneute Überprüfung ob der Ordner vorhanden ist:
Powershell DSC – Desired State Configuration
Erstellt von Jörn Walter www.der-windows-papst.de – 04.04.2017
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
Powershell DSC – Desired State Configuration
Erstellt von Jörn Walter www.der-windows-papst.de – 04.04.2017
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.
Powershell DSC – Desired State Configuration
Erstellt von Jörn Walter www.der-windows-papst.de – 04.04.2017
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
Weitere Beispiele folgen in Kürze…
Get-DscResource | Select-Object -Property Name, Properties
Get-Command -Module PSDesiredStateConfiguration | Select-Object -Property
CommandType, Name
Recommended