2016-07-18 15 views
0

Ich habe Probleme, eine Liste von XMLs zurückzugeben und festzustellen, ob jeder einen bestimmten Knoten hat.Powershell v2.0 - Abfragen von XML-Knoten

Wir haben eine Liste von Employee-Dateien, die entweder einen bestimmten XML-Knoten namens Password haben oder nicht haben. Wenn der Password-Knoten im XML-Code vorhanden ist, handelt es sich um einen neuen Mitarbeiter, anderenfalls handelt es sich um ein Update. In meinem folgenden Skriptversuch scheint es nur das gleiche Ergebnis zu liefern, da ich weiß, dass es XML-Variationen zum Testen gibt.

<?xml version="1.0"?> 
-<EnterpriseDocument CreationTimestamp="2016-07-18T09:44:39"> 
    -<BusinessUnitList> 
    -<BusinessUnit id="4086"> 
    -<User id="1234567" lastName="Sample" firstName="Sample" password="Password1234"> 
    </User> 
    </BusinessUnit> 
</BusinessUnitList> 

$Path = gc 'c:\temp\importexport\*.xml' 
Foreach ($xml in $Path) { 
    $xmldata = [xml]$xml 
    $Password = $XMLData.SelectSingleNode("//BusinessUnitList/BusinessUnit/User/Password") 
    If ($Password) 
     {Write-host "New Employee"} 
    Else 
     {write-host "Employee Update"} 
} 

ich Variationen haben es versucht und experimentiert, aber kann nicht scheinen, um die gemischten Ergebnisse Ich suche zu bekommen. Gibt es etwas, was ich hier falsch mache?

+0

In Ihrem XML, 'password' ist kein Knoten, ist es ein Attribut ist. – Eris

Antwort

0

Wie von Eris erwähnt, ist der Wert password kein Element/Knoten, sondern ein Attribut.

Sie wollen zwei Dinge überprüfen -, dass der Knoten vorhanden ist, und dass das Attribut vorhanden ist:

if(($User = $XML.SelectSingleNode('//User')) -and $User.HasAttribute('password')) 
{ 
    Write-Host 'password found!' 
} 
else 
{ 
    Write-Host 'no password!' 
} 
+0

Ich erhalte * Der Methodenaufruf ist fehlgeschlagen, weil [System.Xml.XmlDocument] keine Methode mit dem Namen 'HasAttribute' * enthält. MSDN erkennt HasAttribute nicht als Powershell-Methode. – JDGEEK

+0

Irgendwelche Gedanken dazu? – JDGEEK

+0

@JDGEEK Was machst du genau? 'SelectSingleNode()' gibt kein 'XmlDocument'-Objekt zurück. –