2017-07-17 1 views
1
$uri = "https://${server}/api/${api_version}/xml" 
$login_request = "<LoginRequest password ='$pwd' user-id = '$user' ></LoginRequest>" 
$resp = Invoke-WebRequest -URI $uri -Body $login_request -ContentType 'text/xml' -Method post 
[xml]$xmldata = $resp.content 
if($xmldata.LoginResponse.success -eq '0'){ 
    Write-Host 'ERROR: '$xmldata.LoginResponse.Failure.message -ForegroundColor Red 
    } 
    Else{ 
    $SCRIPT:session_id = $xmldata.LoginResponse.'session-id' 
    Write-Host "Login Successful" -ForegroundColor Green 
    } 
$disc_request = "<DiscoveryConnectionListingRequest session-id='$SCRIPT:session_id'/>" 
$resp_disc = Invoke-WebRequest -URI $uri -Body $disc_request -ContentType 'text/xml' -Method post 
[xml]$xmldata = $resp_disc.content 
$xmldata.DiscoveryConnectionListingResponse.DiscoveryConnectionSummary 

Das gibt etwa 30 davon:Umgang mit XML-Daten von WebRequest in Powershell

connection-status : Connected 
id    : 58 
name    : server1 
engine-id   : 59 

connection-status : Disconnected 
id    : 57 
name    : server2 
engine-id   : 61 

ich herauszufinden, eine echte harte Zeit, wie durch diese Daten zu gehen, und wenn eine der heraus 'Verbindungsstatus' ist 'getrennt'. Ich würde die gleiche Logik verwenden, um festzustellen, ob die Engine-ID 0 oder 1 ist. Kann mir hier jemand in die richtige Richtung zeigen?

+0

starten: $ xmldata.'engine-id ' Ich erinnere mich nicht daran, dies für Bindestriche tun zu müssen, aber das sollte funktionieren. Wenn nicht, posten Sie bitte Ihren rohen Inhalt (Ergebnis von $ resp.rawcontent), damit wir einen Blick hinter die Kulissen werfen können. –

+2

Sie meinen etwas wie '$ xmldata.DiscoveryConnectionListingResponse.DiscoveryConnectionSummary | Where-Objekt {$ _. Connection-status -eq "Getrennt"} – Hackerman

Antwort

0

Hackerman Kommentar wird der abgezogene connection-status herauszufiltern:

$xmldata.DiscoveryConnectionListingResponse.DiscoveryConnect‌​ionSummary | Where-Object {$_."connection-status" -eq "Disconnected" } 

Bedenken können Sie einfach Schleife über XML-Knoten in Powershell:

foreach($node in $xmldata.DiscoveryConnectionListingResponse.DiscoveryConnectionSummary){ 

    if($node."connection-status" -eq "disconnected"{ 
     # do something 
     Write-Output "ID $($node.id) with engine ID $($node."engine-id") is disconnected" 
    }else{ 
     # do something else 
    } 

} 
Verwandte Themen