Sie müssen den Inhalt mit dem Cmdlet Get-Content laden und in [xml]
umwandeln. Verwenden Sie das SelectNodes
Cmdlets und einen xpath
Ausdruck wählen alle Nachkommen und wandeln es in ein hashtable:
$xml = [xml] (Get-Content 'YOUR_PATH_HERE')
$xml.SelectNodes("descendant::node()") | ? Value | % { @{$_.ParentNode = $_.Value} }
Ausgang:
Name Value
---- -----
state Texas
environment Test
isEnabled False
filepath C:\xmlfile
test Test environement strings
UAT UAT environment strings
bearbeiten: Hier ist eine Arbeits Beispiel mit einem Wörterbuch:
$myDictionary = New-Object "System.Collections.Generic.Dictionary``2[System.String,System.String]"
$xml = [xml] (Get-Content 'YOUR_PATH_HERE')
$xml.SelectNodes("descendant::node()") | ? Value | % $myDictionary.Add($_.ParentNode.ToString(), $_.Value) }
Vielen Dank Jisaak. Es funktioniert wie erwartet. Können Sie mir sagen, Hashtable und Wörterbuch sind anders, oder? Wenn diese anders sind, können Sie mir vorschlagen, wie Sie in das Wörterbuch konvertieren – mahesh
Sie sind willkommen. Es gibt kein * built-in * -Wörterbuch in 'PowerShell'. Aber für Ihre Zwecke sollte auch eine Hashtable passen. Der einzige Unterschied, den ich kenne, ist, dass die Hashtabelle nicht typsicher ist, während Sie ein Wörterbuch angeben können, um eine Zeichenkette als Schlüssel (und Wert) zu verwenden. Wenn Sie das brauchen, können Sie mit 'New-Object" System.Collections.Generic.Dictionary''2 [System.String, System.String] "' ein '.net' Wörterbuch erstellen. Aber ich bezweifle, dass du es brauchst. –
Jisaak, danke für die schnelle Antwort. Eigentlich möchte ich Dictionary ausprobieren. Ich bekomme Syntaxfehler. Können Sie mir bitte sagen, was ich hier vermisse, $ xml = New-Objekt "System.Collections.Generic.Dictionary''2 [System.String, System.String] $ xml.SelectNodes (" abcendant :: node () "? | Wert |% {@ {$ _. ParentNode = $ _. Wert}} .. Danke – mahesh