Okej, ännu en snabb lektion i att hitta XML.
En XML-nod som den här:
<server name="DomainController1"></server>
Använder namnet som ett attribut. Jag har just skrivit ett inlägg om hur man söker i XML med hjälp av nodens attribut.
Men det hjälper inte ett dugg mot nodens faktiska textvärde.
<server>DomainController1</server>
Totalt annorlunda djur. Tricket här är att använda metoden ”text()”.
$XML | Select-Xml -Xpath '//server'
Oh ja… Det är de bra sakerna.
Du kan också söka några nivåer längre ner. Här är ett exempel från en fil i Remote Desktop Connection Manager.
<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>
Om jag vill hämta GROUP-noden som har SERVER som heter DomainController1.myDomain.demo i den… kan jag göra det med XPath och Select-XML.
#This isn't exactly it, but it's a learning step to help you better understand.$xml | Select-XML -XPath '//group/server/properties/name'
Så här hämtar du namnnoden för servern som finns i gruppen. Ser du hur nära det är? Lär du dig inte redan?
På engelska kan XPath-angivelsen översättas till ”Ge mig noden NAME som har textvärdet DomainController1.MyDomain.demo, som är en underliggande nod till en nod som heter properties, som är en underliggande nod till en nod som heter server, som är en underliggande nod till en nod som heter group”. OCH den noden group kan finnas var som helst i XML.”
Vi definierar utanför parentesen den nod som vi vill ta emot. Vi definierar innanför parenteserna utvärderingarna för att komma dit.
Då jag vill ha noden GROUP kommer jag att stoppa allt annat innanför parenteserna.
$xml | Select-XML -XPath '//group'
Nu returnerar det noden group. Du är redo att klona noden, uppdatera attribut eller infoga en underordnad nod och sedan spara det uppdaterade XML-objektet tillbaka till den ursprungliga XML-filen.