PowerShell pour obtenir les valeurs d'attribut à partir de XML avec plusieurs attributs
Le fichier XML suivant est un nœud d'Objet de la sortie de la commande Get-ClusterGroup exécuter à partir d'un 2008 R2 Cluster de Basculement avec PowerShell 2:
<?xml version="1.0"?>
<Objects>
<Object>
<Property Name="Cluster">Cluster1</Property>
<Property Name="IsCoreGroup">False</Property>
<Property Name="OwnerNode">Node1</Property>
<Property Name="State">Offline</Property>
<Property Name="Name">SAP PL1</Property>
<Property Name="Description" />
<Property Name="PersistentState">1</Property>
<Property Name="FailoverThreshold">4294967295</Property>
<Property Name="FailoverPeriod">6</Property>
<Property Name="AutoFailbackType">1</Property>
<Property Name="FailbackWindowStart">4294967295</Property>
<Property Name="FailbackWindowEnd">4294967295</Property>
<Property Name="Priority">1</Property>
<Property Name="DefaultOwner">4294967295</Property>
<Property Name="AntiAffinityClassNames" />
<Property Name="Id">a5ff557f-c81a-43aa-bdb9-e09d0a1103df</Property>
</Object>
</Objects>
Le dossier complet a plus de trois nœuds de support de semblable. Deux de ces nœuds ont la valeur "False" dans le "IsCoreGroup" attribut et les deux autres sont de "Vrais". Ce que j'essaie de faire est d'obtenir la valeur de la propriété "Name" et d'autres attributs de l'Objet nœuds qui ont la valeur "False" dans le "IsCoreGroup" attribut.
J'ai essayé un certain nombre de façons d'obtenir de cet attribut, mais ne peut pas comprendre comment faire un trou dans le frère attributs.
Voici ce que j'ai à ce jour:
[xml]$file = get-content C:\Admin\ClusterGroups.xml
$xmlProperties = $file.SelectNodes("/Objects/Object/Property")
Foreach ($xmlProperty in $xmlProperties) {
$strName = ($xmlProperty | Where-Object {$_.Name -eq "IsCoreGroup" }).InnerXml
If ($strName -eq "False")
{
Echo $xmlProperty
}
}
Cela me donne la suivante:
Name #text
---- -----
IsCoreGroup False
Mais je ne peux pas comprendre comment obtenir le frère propriétés
J'ai essayé de sauvegarder un niveau avec:
[xml]$file = get-content C:\Admin\ClusterGroups.xml
$xmlObjects = $file.SelectNodes("/Objects/Object")
Foreach ($xmlObject in $xmlObjects) {
$strCoreGroup = ($xmlObject | Where-Object {$_.Property.Name -eq "IsCoreGroup" }).InnerXml
If ($strCoreGroup -eq "False")
{
Echo $xmlObject
}
}
Mais ce n'est pas moi, n'importe où.
Toute aide est grandement appréciée!
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour accéder à la parentnode si vous êtes à la variable de points à une propriété de l'élément. Puisque vous avez besoin de trouver un élément de propriété dont le nom est un attribut-valeur, je préfère à l'aide de xpath pour ce faire.
Vous pourriez aussi avoir fait
$xmlproperty.parentnode.whateveryouwant
.Personnellement j'utilise xpath pour rechercher les bons objets pour commencer avec, et les récupérer au niveau de l'objet, de sorte que vous pouvez facilement accéder à d'autres propriétés de l'objet-nœud sans aller jusqu'à un niveau.