PowerShell 4.0 und die Desired State Configuration (DSC) - Mein Start.
PowerShell 4.0 beinhaltet einige kleinere Neuerungen und auch Verbesserungen von Version 3.0 Features. Folgender Befehl in einer 4.0 PowerShell:
Get-help about_Windows_PowerShell_4.0
liefert eine Liste der Neuerungen (inkl. Beschreibung). Hier mal ein paar editierte Auszüge:
- Windows PowerShell Desired State Configuration (DSC)
- Save-Help
- Windows PowerShell debugger (workflows, remote running scripts)
- RunNow Parameter (ScheduledJob)
- Invoke-RestMethod and Invoke-WebRequest (added -Headers)
- Get-Module (extended – easier to use)
- default execution policy setting (is now “RemoteSigned”)
- Asynchronous workflow jobs (no longer deleted when the time-out elapsed)
- RepeatIndefinitely (new parameter for New-JobTrigger, Set-JobTrigger)
- …
Windows PowerShell Desired State Configuration (DSC)
DSC ist für mich die wichtigste Neuerung gerade wenn man im Bereich Deployment, Automation von Multi-Server Umgebungen unterwegs ist. Als Admin beschreibt man dabei in einem “configuration” – PowerShell-Skript-Block wie ein oder mehrere Server (sog. “nodes”) auszusehen haben. Und die PowerShell DSC übernimmt die lästige Arbeit des Einrichtens und der Überwachung, dass das Zielsystem auch so bleibt wie in der “Wunschkonfiguration” vorgeben.
Ich kann also konkret beschreiben z.B. :
- wo und ob Verzeichnisse oder Dateien vorhanden sein sollen,
- welche Windows Rollen und Features aktiviert sind,
- welche Software installiert
- Gruppen und User vorhanden sein sollen.
- etc.
Möglich machen dies Ressource Provider – und die PowerShell 4.0 bringt da schon einige mit. Das kann mit Get-DscResource abgefragt werden.
3 Schritte zur eigenen DSC Demo:
1) PowerShell ISE öffnen und Codeschnipsel sich anzeigen lassen mit STRG-J. Das Basis-Skript-Schnipsel lautet DSC Configuration (simple):
Im Rahmen eines MVA Kurses haben Carsten Rachfahl und ich eine Beispiel DSC-Konfiguration für einen Webserver geschrieben. Wir stellen sicher dass der IIS auf einem Windows Server 2012 R2 installiert ist und kopieren dann den Inhalt eines Shares (die html website) in den Standard – Webordner. Unsere finale Version ist:
configuration MyDSCWebConfig
{
Param([string]$ComputerName) #we use a parameter for node instead of hardcoded values
# One can evaluate expressions to get the node list
# E.g: $AllNodes.Where("Role -eq Web").NodeName
node ($ComputerName)
{
# Call Resource Provider
# E.g: WindowsFeature, File
WindowsFeature WEBServer
{
Ensure = "Present"
Name = "Web-Server" #call "get-windowsfeature" to retrieve the name
}
File WebDirectory
{
Ensure = "Present"
SourcePath = "\\file-hlb01\Ressources\webcontent" #you may want to change this
Recurse = $true
DestinationPath = "c:\inetpub\wwwroot"
Type = "Directory"
DependsOn = "[WindowsFeature]WEBServer" #first the webserver then the content
}
}
}
diesen Block führen wir in der ISE aus.
2) Wir rufen wir den Namen der configuration (hier: MyDSCWebConfig) auf und erzeugen uns damit eine *.mof Datei im angegebenen Ordner.
MyDSCWebConfig -OutputPath "C:\myDSC" -ComputerName localhost
Da wir mit einem Parameter (namens ComputerName) arbeiten anstatt hardcodierte Einträge zu verwenden, müssen wir diesen hier angeben. Anm.: wird der configuration Block einmal in der ISE ausgeführt erkennt IntelliSense den Namen des Parameters.
3) Mit folgendem Befehl starten wir die DSC und richten den Webserver auf dem Zielhost ein:
Start-DscConfiguration -Path "C:\myDSC" -Verbose -Wait
Ziemlich beeindruckend wie ich finde.
Und das Beste die DSC kann etwaige Änderungen z.B. durch fehlerhaftes Löschen, Deinstallieren o.ä. nicht nur erkennen werden sondern auch automatisch reparieren. Das erfordert nur eine kleine Konfiguration des Local Configuration Managers (LCM) . Siehe dazu den folgenden Blogeintrag: PowerShell und DSC: Local Configuration Manager Setting ApplyAndAutoCorrect
Weiteres:
Das PowerShell Team ist sehr fleißig und hat in einem DSC Resource Kit Erweiterungen zu den Standardprovidern geschrieben um z.B. die Firewall Einträge auf einem Server zu setzen.
Links zum Thema:
- TechNet: Windows PowerShell Desired State Configuration Overview.
- TechEd 2013 Video von Jeffrey Snover: Desired State Configuration in Windows Server 2012 R2 PowerShell
- PowerShell Team Blog zum Thema DSC
- TechNet Gallery: DSC Resource Kit
Comments
- Anonymous
January 01, 2003
Hallo Bernhard!
Schöner Artikel! Danke!
Ich hatte auf der 2. Deutschen PowerShell Konferenz in Oberhausen den Desired State Configuration Vortrag gehalten.
Ebenso habe ich den DSC Vortrag beim Hyper-V treffen in Hannover vorgetragen (bei Carsten Rachfahl).
Diesen Vortrag habe ich in einer sehr ausführlichen deep dive Version, als Video veröffentlicht.
Siehe hier:
Desired State Configuration (DSC) deep dive Windows PowerShell 4.0
http://www.powershell-group.eu/desired-state-configuration-dsc/
Gruss Peter Kriegel
deutschsprachige PowerShell Community
http://www.PowerShell-Group.eu - Anonymous
April 25, 2014
In meinem ersten Post zur Desired State Configuration (DSC) habe ich beschrieben wie man sich eine Beispiel - Anonymous
April 29, 2014
The comment has been removed