PowerShell – XML Dateien schreiben, lesen und bearbeiten

Erzeugen von XML Dateien

Anhand einer Städteliste im XML Format möchte ich die Erzeugung einer XML Datei mit PowerShell Mitteln darstellen. So soll die Datei am Ende aussehen:

XML2

Am einfachsten erzeugen Sie XML Dateien mit der New-Object Funktion. Hierbei können Sie direkt das XML Format an den Konstruktor übergeben und so eine Datei erzeugen lassen. Das XmlTextWriter Objekt muss wissen, wie der Name der Datei ist. Über $Null erstellen Sie die Datei ohne Inhalt.

xml1

Um das XML Format leichter lesen zu können, sind einige Formatierungen erforderlich. Der Kosmetik halber rücke ich gerne mit Tabulatoren ein 🙂

XML3

Jetzt füllen wir das XML entsprechend mit Inhalt. Zuerst wird das XML mit WriteStartDocument erstellt. Als nächstes folgt das neue Element mit WriteStartElement. Im ersten Fall die gesamte Liste. Danach wieder mit WriteStartElement das erste Element für „Frankfurt“. Jetzt werden die jeweiligen Element Daten mit WriteElementString gesetzt und das Element nach Abschluss wieder mit WritEndElement geschlossen. Wenn alle Städte eingegeben wurden, muss auch die Liste wieder mit WriteEndElement geschlossen werden. Und natürlich die Datei nicht vergessen und mit WriteEndDocument schliessen.

Zum Abschluß noch der Ordnung halber den Buffer löschen und den Stream schliessen.

Hier alles in einem Script:

XML4

Export-CliXml

Die Powershell bietet auch die Möglichkeit, Abfragen so ziemlich jeglicher Art in einem XML abzulegen, um sie dort weiter zu verarbeiten. Beispiel ist eine Abfrage, um DCs einer Domäne zu erhalten und diese zur Weiterverarbeitung in einem XML zu speichern. Sie erreichen dies mit dem CmdLet Export-Clixml. Mit Select-Object können Sie schon beim Export auswählen, welche Properties nachher im XML zu finden sind.

xml8

Damit erhalten sie ein XML mit den Daten Name, Domäne und IP Adresse aller DCs einer Domäne:

xml9

Lesen von XML Dateien

XML Dateien bieten den Vorteil, dass die Powershell den Inhalt gleich als Objekt weiter verarbeiten kann und die Sprache XML versteht.

Am einfachsten erkennen Sie dies, wenn sie den Inhalt einer XML in eine Variable einlesen. Wenn Sie diese Variable nachher ausgeben, sehen Sie, dass der Inhalt einfach Zeile für Zeile gelesen wurde und so die eigentliche XML Funktionalität verloren ging

xml6

Wenn Sie beim Einlesen allerdings schon das Format mit angeben, kann die Powershell die Datei und damit deren Inhalt als XML Objekt verarbeiten. Sie erreichen dies, wenn sie der Variablen das Format XML mitgeben. Typecasting heißt hier das Zauberwort 🙂

xml7

Sie können  in den Daten auch suchen. Das XML Format bietet eine Fülle von Methoden zur Weiterverarbeitung. Über get-member können Sie sich die entsprechenden Methoden anschauen

xml10

Hier ein Beispiel für die Verwendung der Methode SelectNodes

xml13

Damit haben sie alle Möglichkeiten der Weiterverarbeitung, die ein Objekt mit sich bringt. Hier noch ein paar Beispiele

xml11

  1. … liefert alle Städte, die größer als 520.000 Einwohner sind.
  2. … liefert alle Städte, die in einem Bundesland beginnend mit Hess liegen.
  3. … liefert die Gesamtanzahl der Städte mir der Summe aller Einwohner.

Für die über Export-Clixml erstellte Datei gelten natürlich die gleichen Voraussetzungen

xml12

  1. … liefert alle Maschinen mit dem Namen “Server…”.
  2. … liefert alle Maschinen, die eine 12 in ihrer IP Adresse haben.

XML Bearbeiten

Natürlich können Sie eine solche XML auch weiter bearbeiten und Objekte z.B. hinzufügen. Nehmen wir weiter das Städtebeispiel und fügen noch eine Stadt hinzu. Nehmen wir Augsburg noch dazu.

Dazu lesen wir die Datei zuerst wieder in eine Variable im XML Format ein:

XML8

Dann müssen die neuen Elemente erstellt …

XML9

…und natürlich auch mit Leben gefüllt werden.

XML10

Im nächsten Schritt werden die einzelnen Objekte den übergeordneten über AppendChild angehängt.

Dazu wird die Variable $new deklariert und mit Leben gefüllt. (@Mirco:  Danke für den Hinweis)

XML11

Das eigentliche neue Objekt muss nun noch in die Liste hinzugefügt werden.

XML12

Und abspeichern müssen Sie das alles natürlich auch noch

XML13

Und schon ist die Liste erweitert

XML14