Einleitung

Es wird auf eine ausführliche Beschreibung der XML Funktionen in Powershell verzichtet. Diese sind zu Genüge in verschiedenen Büchern und Blogg’s beschrieben. In diesem Blogg werden nur die notwendigsten, einfachsten und wichtigsten Funktionen beschrieben.

Eines möchte ich aber hier sagen: „Powershell und XML ist ein Dreamteam“ und wenn behauptet wird, Powershell ist ein „must“ für jeden Windows Admin, so sollte auch gesagt werden, XML ist ebenfalls ein „must“ – an XML geht kein Weg vorbei!

Eine XML Datei erstellen

Eine „leere“ XML Datei mit Powershell erstellen:

cls
$xmlFile = "C:\_Daten\xmlFile.xml"
$date = Get-Date –f "yyyy-MM-dd HH:mm:ss"
$xmlobj = [xml] "<?xml version='1.0' encoding='utf-8'?><inhalt stamp='$date' file='$xmlFile' host='$env:computername' username='$env:username' />"
$xmlobj.Save($xmlFile)

Wichtig der erste Knoten sollte Inhalt haben („<inhalt name=’test‘ />“)!

Elemente erstellen und mit Daten ergänzen

Elemente in einer XML Struktur erstellen und mit Daten füllen. Hier ein Beispiel:

cls
$strWerte = "Name1,Wert1;Name2,Wert2;Name3,Wert3;Name4,Wert4;Name5,Wert5"
$arrWerte = $strWerte.Split(";")
$xmlFile = "C:\_Daten\xmlFile.xml"
$date = Get-Date –f "yyyy-MM-dd HH:mm:ss"
$xmlobj = [xml] "<?xml version='1.0' encoding='utf-8'?><inhalt stamp='$date' file='$xmlFile' host='$env:computername' username='$env:username' />"
# Prüfen ob das Basis Element bereits erstellt wurde
if(!$xmlobj.inhalt.elements){
 $nodeElements = $xmlobj.CreateElement("elements") # <- oberstes Element erstellen
 $xmlobj.inhalt.AppendChild($nodeElements) | Out-Null # <- Element in Knoten ablegen
}
# Erstellen der SubElemente
ForEach($arrWert in $arrWerte){
 $Werte= $arrWert.Split(",")
 $nodeElement = $xmlobj.createElement("element") # <- SubElement erstellen
 $nodeElement.SetAttribute("name",$Werte[0]) # <- SubElement mit Wert füllen
 $nodeElement.SetAttribute("value",$Werte[1]) # <- SubElement mit Wert füllen
 $nodeElement.SetAttribute("active","1") # <- SubElement mit Wert füllen
 $nodeElements.AppendChild($nodeElement) | Out-Null # <- SubElement in Knoten ablegen
}
$xmlobj.inhalt.AppendChild($nodeElements) | Out-Null # <- SubElement in Element ablegen
$xmlobj.Save($xmlFile)

Auslesen und auswerten einer XML Datei

Eine Möglichkeit für die Auswertung von XML Strukturen ist die XPath Methode. Hier wieder ein Beispiel:

cls
$xmlFile = "D:\_Daten\xmlFile.xml"
$xmlobj = New-Object XML
$xmlobj.Load($xmlFile)
$nxPath = "inhalt/elements/element[@name='Name1' and @ active='1']"
$nodes = $xmlobj.SelectNodes($nxPath)
$nodes

Hilfreiche Infos können in der Linksammlung abgerufen werden.

Ändern von Werten in einer XML Struktur

Werte in einer XML Struktur können auf verschiedene Wege und Arten mutiert werden. Hier mit der Powershell eigenen Funktionen.

cls
$xmlFile = "D:\_Daten\xmlFile.xml"
$xmlobj = New-Object XML
$xmlobj.Load($xmlFile)
$xmlobj.inhalt.elements.element | Where-Object {$_.Name -eq "Name1"} | ForEach-Object{
 $_.active = "0"
}
$xmlobj.Save($xmlFile)

Links und wichtige Zusatzinformationen

Allgemeine Informationen zum Thema Powershell und XML
PowerShell.com

xPath ergänzende Informationen
w3cSchools