J'ai ce qui suit:
$aMyArray = $null
[xml]$userfile = Get-Content C:\AppSense\Scripts\AmPolicyConversion\AM_dev.xml
$i = 0
FOREACH ($j in $userfile.ChildNodes){
FOREACH($k in $j.DocumentElement) {
}
$i = $i + 1
}
J'essaie de comprendre comment parcourir chaque élément de PowerShell.
Recherchez ensuite un attribut SID sur l'élément.
S'il existe, obtenez la valeur d'attribut et mettez cette valeur dans un objet et pour le même élément, saisissez le deuxième attribut DISPLAYNAME et placez-le dans le même objet. Nous allons créer un tableau d'objets.
Je sais que je suis loin mais j'espère que vous pourrez m'aider.
Utilisez plutôt XPATH pour trouver tous les nœuds avec un attribut SID comme ceci:
$objs = @()
$nodes = $userfile.SelectNodes("//*[@SID]")
foreach ($node in $nodes) {
$sid = $node.attributes['SID'].value
$dispName = $node.attributes['DISPLAYNAME'].value
$obj = new-object psobject -prop @{SID=$sid;DISPNAME=$dispName}
$objs += $obj
}
$objs
Voici un exemple avec sortie:
$xml = [xml]@"
<doc>
<foo SID='foosid' DISPLAYNAME="foodisp">
<bar SID='barsid' DISPLAYNAME="bardisp"/>
<baz>
<blech SID='blechsid' DISPLAYNAME="blechdisp"/>
</baz>
</foo>
</doc>
"@
$objs = @()
$nodes = $xml.SelectNodes("//*[@SID]")
foreach ($node in $nodes) {
$sid = $node.attributes['SID'].value
$dispName = $node.attributes['DISPLAYNAME'].value
$obj = new-object psobject -prop @{SID=$sid;DISPNAME=$dispName}
$objs += $obj
}
$objs
Les sorties:
SID DISPNAME
--- --------
foosid foodisp
barsid bardisp
blechsid blechdisp
Vous pouvez également référencer les nœuds enfants lorsque vous parcourez les nœuds childNodes:
$j.LocalName (the name of the child element)
$j.InnerXml (the Xml content of the child node)