Wie man XML-Dateien mit PowerShell analysiert

  1. Verwenden Sie Select-Xml, um XML-Dateien mit PowerShell zu parsen
  2. Verwenden Sie die System.Xml.XmlDocument Klasse, um XML-Dateien mit PowerShell zu parsen
  3. Verwenden Sie die System.Xml.XmlTextReader Klasse, um XML-Dateien mit PowerShell zu parsen
  4. Fazit
Wie man XML-Dateien mit PowerShell analysiert

Die erweiterbare Auszeichnungssprache oder XML-Format wird auch heute noch häufig verwendet. Konfigurationsdateien, RSS-Feeds und Office-Dateien sind nur einige Beispiele, die das XML-Format nutzen.

Das Parsen von XML in PowerShell ist eine gängige Aufgabe, die häufig für Aufgaben wie Datenextraktion, Konfigurationsmanagement und Automatisierung erforderlich ist. Während PowerShell mehrere Methoden zum Parsen von XML bietet, hat jede Methode ihre Stärken und Anwendungsfälle.

In diesem Artikel werden wir drei Methoden zum Parsen von XML in PowerShell untersuchen: die Verwendung des Select-Xml Cmdlets, der System.Xml.XmlDocument Klasse und der System.Xml.XmlTextReader Klasse. Wir werden detaillierte Beispiele und Erklärungen für jede Methode bereitstellen und ihre Syntax, Funktionalität und praktischen Anwendungen hervorheben.

Verwenden Sie Select-Xml, um XML-Dateien mit PowerShell zu parsen

PowerShell XML-Elemente parsen

Zuerst lassen Sie uns einen der beliebtesten und einfachsten Wege behandeln, um PowerShell zum Parsen von XML mit Select-Xml zu verwenden. Der PowerShell-Befehl Select-Xml ermöglicht es uns, eine XML-Datei oder einen String und einen XPath-Filter bereitzustellen, um spezifische Informationen herauszuziehen.

Wir haben eine XML-Datei auf vielen PCs, die wir mit PowerShell parsen möchten. Zum Beispiel hat jede Maschine einen Namen, eine IP-Adresse und ein Include-Element, das in einem Bericht verwendet werden kann.

Beispiel XML:

<Computers>
	<Computer>
		<Name>WINPC-01</Name>
		<Ip>127.0.0.1</Ip>
		<Include>true</Include>
	</Computer>
	<Computer>
		<Name>WINPC-02</Name>
		<Ip>192.168.1.105</Ip>
		<Include>false</Include>
	</Computer>
	<Computer>
		<Name>WINPC-03</Name>
		<Ip>192.168.1.104</Ip>
		<Include>true</Include>
	</Computer>
</Computers>

Wir möchten PowerShell verwenden, um diese XML-Datei zu parsen und die Computernamen zu erhalten. Dazu könnten wir den Befehl Select-Xml verwenden.

Zum Beispiel erscheinen im obigen Datei die Computernamen im inneren Text (InnerXML) des Name-Elements.

Zuerst würden wir die geeignete XPath-Anweisung bereitstellen, um die Computernamen zu finden. Nur die Name-Knoten, die in den Computer-Elementen enthalten sind, würden mit dieser XPath-Technik zurückgegeben.

Beispielcode:

Select-Xml -Path sample.xml -XPath '/Computers/Computer/Name' | ForEach-Object { $_.Node.InnerXML }

Wir verwenden Select-Xml, um die XML-Datei unter C:\path\sample.xml nach Knoten zu durchsuchen, die dem XPath-Ausdruck '/Computers/Computer/Name' entsprechen. Dieser XPath-Ausdruck weist PowerShell an, alle <Name>-Elemente innerhalb jedes <Computer>-Elements unter dem <Computers>-Wurzelknoten auszuwählen.

Anschließend verwenden wir das Cmdlet ForEach-Object, um über die Ergebnisse zu iterieren, die vom Cmdlet Select-Xml zurückgegeben wurden. Innerhalb dieser Schleife greifen wir auf die InnerXML-Eigenschaft jedes übereinstimmenden Knotens zu.

Diese Eigenschaft enthält den inneren Textinhalt des XML-Elements, wodurch wir die gewünschten Daten extrahieren können.

Ausgabe:

powershell XML analysieren - Ausgabe 1

PowerShell XML-Attribute parsen

Jetzt lassen Sie uns einen neuen Ansatz zur Auffindung von Computernamen wählen. Anstatt durch XML-Elemente dargestellt zu werden, werden Computerbeschreibungen direkt durch XML-Attribute ausgedrückt.

Nachfolgend finden Sie eine Beispiel-XML-Datei mit durch Attribute dargestellten Computerbeschreibungen. Wir können nun jeden Beschreiber als Attribut und nicht als Element sehen.

Beispiel XML:

<Computers>
	<Computer name="WINPC-01" ip="127.0.0.1" include="true" />
	<Computer name="WINPC-02" ip="192.168.1.104" include="false" />
	<Computer name="WINPC-03" ip="192.168.1.105" include="true" />
</Computers>

Da jeder Beschreiber ein Attribut ist, passen Sie die XPath-Anweisung nur an, um die Computer-Elemente zu finden. Verwenden Sie dann ein ForEach-Object-Cmdlet, um den Wert des name-Attributs zu finden.

Beispielcode:

Select-Xml -Path sample.xml -XPath '/Computers/Computer' | ForEach-Object { $_.Node.name }

Wir verwenden Select-Xml, um die XML-Datei unter C:\path\computers-attr.xml nach Knoten zu durchsuchen, die dem XPath-Ausdruck '/Computers/Computer' entsprechen. Dieser XPath-Ausdruck wählt alle <Computer>-Elemente unter dem <Computers>-Wurzelknoten aus.

Anschließend verwenden wir das Cmdlet ForEach-Object, um über die Ergebnisse zu iterieren; innerhalb der Schleife greifen wir auf die name-Eigenschaft jedes übereinstimmenden Knotens zu. Diese Eigenschaft repräsentiert den Wert des name-Attributs jedes <Computer>-Elements.

Ausgabe:

PowerShell XML analysieren - Ausgabe 2

Ob wir Elemente oder Attribute lesen, die Syntax von Select-Xml ist umständlich: sie zwingt uns, den XPath-Parameter zu verwenden, dann das Ergebnis in eine Schleife weiterzuleiten und schließlich nach den Daten unter der Node-Eigenschaft zu suchen.

Verwenden Sie die System.Xml.XmlDocument Klasse, um XML-Dateien mit PowerShell zu parsen

Die System.Xml.XmlDocument-Klasse zum Parsen von XML in PowerShell bietet eine vielseitige und effektive Lösung zum Umgang mit XML-Daten, die sie zu einem wertvollen Werkzeug für verschiedene Automatisierungsaufgaben, Datenverarbeitung und Konfigurationsmanagement-Szenarien macht.

Diese Methode umfasst die Erstellung einer Instanz der XmlDocument-Klasse, das Laden des XML-Inhalts in das Dokumentobjekt und das Navigieren durch die Knoten des Dokuments, um die gewünschten Daten zuzugreifen.

Beispielcode:

$xmlDocument = New-Object System.Xml.XmlDocument
$xmlDocument.Load("sample.xml")

$computerNodes = $xmlDocument.SelectNodes("//Computer")
foreach ($computerNode in $computerNodes) {
    $name = $computerNode.SelectSingleNode("Name").InnerText
    Write-Output $name
}

In diesem Code-Snippet erstellen wir eine neue Instanz der System.Xml.XmlDocument-Klasse mit New-Object. Dann laden wir den XML-Inhalt aus der Datei C:\path\computers.xml in das $xmlDocument-Objekt mithilfe der Load-Methode.

Wir verwenden die Methode SelectNodes, um alle <Computer>-Elemente im XML-Dokument abzurufen.

Dann iterieren wir über jedes <Computer>-Element mit einer foreach-Schleife. Innerhalb der Schleife verwenden wir SelectSingleNode, um das <Name>-Element innerhalb jedes <Computer>-Elements zu finden und dessen inneren Text mit der InnerText-Eigenschaft zu extrahieren.

Schließlich geben wir die Computernamen mit Write-Output aus.

Ausgabe:

powershell xml analysieren - ausgabe 3

Verwenden Sie die System.Xml.XmlTextReader Klasse, um XML-Dateien mit PowerShell zu parsen

Das Parsen von XML in PowerShell mit der System.Xml.XmlTextReader-Klasse bietet eine unkomplizierte und speichereffiziente Methode zur Verarbeitung von XML-Daten. Diese Klasse bietet einen vorwärtsgerichteten, nur lesbaren Stream, der XML-Daten effizient parst, ohne das gesamte Dokument in den Speicher zu laden.

Durch die Nutzung des XmlTextReader können PowerShell-Skripte spezifische Elemente oder Attribute aus XML-Dokumenten effizient extrahieren und Aufgaben wie Datenextraktion, Konfigurationsmanagement und Automatisierung ermöglichen.

Beispielcode:

$xmlFilePath = "sample.xml"
$xmlReader = [System.Xml.XmlTextReader]::new($xmlFilePath)

while ($xmlReader.Read()) {
    if ($xmlReader.NodeType -eq "Element" -and $xmlReader.Name -eq "Name") {
        $name = $xmlReader.ReadString()
        Write-Output $name
    }
}

In diesem Code-Snippet geben wir den Pfad zur XML-Datei mit der Variablen $xmlFilePath an. Wir erstellen dann eine neue Instanz der System.Xml.XmlTextReader-Klasse und initialisieren sie mit dem XML-Inhalt aus der Datei, die durch $xmlFilePath angegeben wird.

Wir verwenden eine while-Schleife, um den XML-Inhalt mit der Read-Methode der XmlTextReader-Klasse zu durchlaufen. Innerhalb der Schleife überprüfen wir, ob der aktuelle Knotentyp ein Element ist und ob sein Name Name ist.

Wenn beide Bedingungen erfüllt sind, verwenden wir die ReadString-Methode, um den inneren Text des <Name>-Elements zu extrahieren und ihn mit Write-Output auszugeben.

Ausgabe:

powershell xml analysieren - Ausgabe 4

Fazit

Das Parsen von XML in PowerShell ist eine vielseitige und essentielle Fähigkeit für viele Automatisierungs- und Datenverarbeitungsaufgaben. Durch das Verständnis der verschiedenen verfügbaren Methoden, wie Select-Xml, System.Xml.XmlDocument und System.Xml.XmlTextReader, können PowerShell-Anwender effektiv Daten aus XML-Dokumenten extrahieren und manipulieren, um ihren Bedürfnissen gerecht zu werden.

Ob beim Parsen von Elementen oder Attributen, jede Methode bietet ihre Vorteile, sodass PowerShell-Skripte XML-Daten effektiv verarbeiten können. Durch die Nutzung dieser Parsing-Techniken können PowerShell-Anwender ihre Arbeitsabläufe optimieren und ihre Automatisierungsziele effizienter erreichen.

Genießen Sie unsere Tutorials? Abonnieren Sie DelftStack auf YouTube, um uns bei der Erstellung weiterer hochwertiger Videoanleitungen zu unterstützen. Abonnieren
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Verwandter Artikel - PowerShell XML