System-Administration mit Microsofts PowerShell Teil 10
XML-Bearbeitung mit der PowerShell
![]() |
Im zehnten Teil der PowerShell-Artikelserie zeigt SearchNetworking, wie sich XML-Daten mit wenig Aufwand über die PowerShell bearbeiten lassen.
Auch die PowerShell bietet umfangreiche Möglichkeiten zur XML-Behandlung über einen speziellen Datentyp. Darüber hinaus kann dabei die große PowerShell-Stärke, der Pipeline Processor, eingesetzt werden.
XML-Daten laden und speichern
Variablen, die XML-Daten enthalten sollen, müssen bei der ersten Verwendung über [XML] deklariert werden. Die Daten selbst können direkt übergeben oder aus einer Datei geladen werden. Beispiele:
[XML]$x = „<mitarbeiter><person>Mustermann</person></mitarbeiter>“
[XML]$x = get-content c:\mitarbeiter.xml
Das Speichern der XML-Daten wird über die Methode Save der XML-Klasse erledigt. Dort werden mit dem Parameter Pfad und Dateiname übergeben:
$x.Save(„c:\ausgabe.xml“)
Auswerten von XML-Daten
Das Auslesen von XML-Daten in einer Variablen gestaltet sich recht einfach, indem die Bezeichner aus der Elementhierarchie genutzt werden. Anhand folgender Daten soll dies verdeutlicht werden:
<Mitarbeiter>
<Person>
<Name>Meier</Name>
<Tel>(0123)4567</Tel>
</person>
<Person>
<Name>Schuster</Name>
<Tel>(0987)6543</Tel>
</person>
</mitarbeiter>
Wird der Inhalt von $x ausgegeben, erscheint nur das Root-Element Mitarbeiter:
PS C:\> $x
Mitarbeiter
-----------
Mitarbeiter
Die tiefer liegenden Elemente können über ihre Bezeichner angesprochen werden. Diese werden mit einem Punkt vom Variablennamen getrennt.
PS C:\> $x.Mitarbeiter
Person
------
{Meier, Schuster}
Dieses Spiel lässt sich nun immer weiter fortführen:
PS C:\> $x.Mitarbeiter.Person
Name Tel
---- ---
Meier (0123)4567
Schuster (0987)6543
Werden wie im vorhergehenden Fall mehrere Elemente geliefert, kann über die Arrayindizierung direkt darauf zugegriffen werden:
PS C:\> $x.Mitarbeiter.Person[0]
Name Tel
---- ---
Meier (0123)4567
Außerdem können die Elemente auch über die PowerShell-Pipeline weiterverarbeitet werden, etwa mit dem Cmdlet where-object zur Suche nach den Daten eines bestimmten Mitarbeiters:
$x.Mitarbeiter.Person | where-object { $_.Name -eq „Meier“ }
XML-Elemente anlegen
Ein neues XML-Element wird über die Methode CreateElement der XML-Klasse angelegt. Als Parameter wird dabei der gewünschte Name des neuen Elements übergeben.
$e = $x.CreateElement(„Person“)
Soll das neue Element einen Wert erhalten, würde er mit der Methode set_InnerText angegeben. Im Beispiel wäre dies etwa bei einem Name-Element der Fall.
$e.set_InnerText(„Bauer“)
CreateElement gibt das neue Element zurück, es ist jedoch noch nicht in die vorhandene XML-Struktur eingebunden. Dies muss erst über die Methode AppendChild an der gewünschten Stelle vorgenommen werden.
$x.Mitarbeiter.AppendChild($e)
Das Entfernen vorhandener Elemente wird mit RemoveChild durchgeführt, wobei als Parameter das entsprechende XML-Element-Objekt übergeben wird.
XML-Attribute hinzufügen
Neben neuen XML-Elementen können auch Attribute angelegt werden. Das Vorgehen ist dabei ähnlich. Zuerst wird über CreateAttribute das neue Attribut erstellt.
$a = $x.CreateAttribute(„Ersteller“)
Als nächstes wird der gewünschte Wert über die Methode set_Value gesetzt.
$a.set_Value(„Schmidt“)
Zuletzt wird das neue Attribut mit SetAttributeNode zum zugehörigen Element hinzugefügt.
$a.Mitglieder.SetAttributeNode($a)
Auch hier gibt es mit RemoveAttribute eine Methode zum Entfernen.
Wie so oft lohnt es sich, den Aufbau der auftretenden Objekte mit Hilfe des Cmdlets get-member aufzulisten, um alle verfügbaren Eigenschaften und Methoden zu ermitteln und weitere Bearbeitungsmöglichkeiten zu entdecken.
Anhand der gezeigten Beispiele wird die Leistungsfähigkeit der PowerShell bei der XML-Daten-Bearbeitung deutlich. Entwickler, die bisher mit VBScript und den Microsoft COM-Objekten zur XML-Bearbeitung gearbeitet haben, werden dies zu schätzen wissen.
Im nächsten Teil der PowerShell-Artikelserie zeigt SearchNetworking, wie der neue Microsoft Exchange
Microsoft Deutschland GmbH
Firmenprofil
Kontakt
-
WPA-PSK + WPA2-PSK gleichzeitig einstellen?
posted am 10.03.2010 um 09:33 von Hans-Dieter
-
RE: Kein Ruhezustand mehr bei Vista???
posted am 09.03.2010 um 23:41 von nicht registrierter User
-
ZyWall 35 - Wrong product Model
posted am 09.03.2010 um 17:58 von nicht registrierter User
-
RE: 3GP-Videos in Windows Mediaplayer abspielen?
posted am 09.03.2010 um 15:12 von Fachwirt
-
RE: UMTS/3G im Ausland?
posted am 09.03.2010 um 08:53 von JoeCool
Follow us!

















(nicht registrierter User)
Kommentar abschicken