Also, eine weitere kurze Lektion in Sachen XML-Suche.
Sie sehen, ein XML-Knoten wie dieser:
<server name="DomainController1"></server>
Verwendet den Namen als Attribut. Ich habe gerade einen Beitrag darüber geschrieben, wie man XML nach Knotenattributen durchsucht.
Aber das bringt nichts, wenn man den tatsächlichen Textwert des Knotens sucht.
<server>DomainController1</server>
Ein völlig anderes Thema. Der Trick hier ist, die Methode „text()“ zu verwenden.
$XML | Select-Xml -Xpath '//server'
Ja… Das ist das Gute daran.
Sie können auch ein paar Ebenen tiefer suchen. Hier ist ein Beispiel aus einer Remotedesktop-Verbindungsmanagerdatei.
<group> <properties> <expanded>True</expanded> <name>DomainControllers</name> </properties> <logonCredentials inherit="None"> <profileName scope="File">myDomain\myAccount</profileName> </logonCredentials> <server> <properties> <name>DomainController1.myDomain.demo</name> </properties> </server></group>
Wenn ich den GROUP-Knoten abrufen möchte, der den SERVER mit dem Namen DomainController1.myDomain.demo enthält… kann ich das mit XPath und Select-XML tun.
#This isn't exactly it, but it's a learning step to help you better understand.$xml | Select-XML -XPath '//group/server/properties/name'
So erhalte ich den Namensknoten des Servers, der in der Gruppe ist. Sehen Sie, wie nahe das ist? Haben Sie es nicht schon gelernt?
Auf Englisch bedeutet diese XPath-Anweisung: „Gib mir den NAME-Knoten, der den Textwert von DomainController1.MyDomain.demo hat, der der Kindknoten eines Knotens namens properties ist, der ein Kind eines Knotens namens server ist, der das Kind eines Knotens namens group ist. AND, that group node could be anywhere in the XML.“
Wir definieren außerhalb der Klammern den Knoten, den wir empfangen wollen. Innerhalb der Klammern definieren wir die Auswertungen, um dorthin zu gelangen.
Da ich den Knoten GROUP will, werde ich alles andere in die Klammern packen.
$xml | Select-XML -XPath '//group'
Das gibt nun den Knoten group zurück. Jetzt können Sie den Knoten klonen, Attribute aktualisieren oder einen untergeordneten Knoten einfügen und das aktualisierte XML-Objekt wieder in der ursprünglichen XML-Datei speichern.