Random WebRequest Ergebnisse mit PowerShell
Habe ich Folgendes snippet unterhalb von meinem Skript, das mit einem WebRequest zu ping eine Liste der web - /app-Server, und ich bin immer zufällige Ergebnisse, basierend auf den um die gute/schlechte Server sind aufgelistet in der server-Liste.
Zum Beispiel, wenn die schlechte Server (wo ich wieder einen code 404 oder 503), werden zuerst aufgeführt in der Liste ist dann mein Skript scheint, um genau zu berichten. Allerdings, wenn der gute server (der bekommt wieder den status = "OK") zuerst aufgeführt ist dann meine Ergebnisse sind falsch.
Hier ist mein code-snippet:
$ServerList = gc "$pwd\servers\test_servers.lst"
ForEach ($_ in $ServerList)
{
# Ping web server test
$url = "http://$_.domain.net/logon"
Write-Host "Pinging web address for server: $url ..."
$request = [System.Net.WebRequest]::Create($url)
$response = $request.GetResponse()
If ($response.StatusCode -eq "OK")
{
#$True
Write-Host "Web Ping on $_ Succeeded."
}
Else
{
#$False
Write-Host "Web Ping on $_ FAILED!!!"
}
}
Hier ist der Beispiel-Liste:
server1 (reports back a 404)
server2 (reports back a 503)
server3 (gets a status = "OK")
Und hier ist die "genaue" cmd die Ausgabe wenn ich das script ausführen:
C:\TFS\Sandbox>powershell ./temp.ps1
Pinging web address for server: http://server1.domain.net/wfc/logon ...
Exception calling "GetResponse" with "0" argument(s): "The remote server return
ed an error: (404) Not Found."
At C:\TFS\Sandbox\temp.ps1:8 char:34
+ $response = $request.GetResponse <<<< ()
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
Web Ping on server1 FAILED!!!
Pinging web address for server: http://server2.domain.net/wfc/logon ...
Exception calling "GetResponse" with "0" argument(s): "The remote server return
ed an error: (503) Server Unavailable."
At C:\TFS\Sandbox\temp.ps1:8 char:34
+ $response = $request.GetResponse <<<< ()
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
Web Ping on server2 FAILED!!!
Pinging web address for server: http://server3.domain.net/wfc/logon ...
Web Ping on server3 Succeeded.
Wenn ich jetzt wieder um die server-Liste, wo die guten server zuerst aufgeführt ist, etwa so:
server3 (gets a status = "OK")
server1 (reports back a 404)
server2 (reports back a 503)
Erhalte ich ungenaue Ergebnisse, wo server 1 und server 2 sind immer gemeldet, OK:
Pinging web address for server: http://server3.domain.net/wfc/logon ...
Web Ping on server3 Succeeded.
Pinging web address for server: http://server1.domain.net/wfc/logon ...
Exception calling "GetResponse" with "0" argument(s): "The remote server return
ed an error: (404) Not Found."
At C:\TFS\Sandbox\temp.ps1:8 char:34
+ $response = $request.GetResponse <<<< ()
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
Web Ping on server1 Succeeded.
Pinging web address for server: http://server2.domain.net/wfc/logon ...
Exception calling "GetResponse" with "0" argument(s): "The remote server return
ed an error: (503) Server Unavailable."
At C:\TFS\Sandbox\temp.ps1:8 char:34
+ $response = $request.GetResponse <<<< ()
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
Web Ping on server2 Succeeded.
Warum bekomme ich unterschiedliche Ergebnisse, basierend auf, wie die Server aufgelistet sind?
Vielen Dank im Voraus!
InformationsquelleAutor Keith | 2012-02-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist, weil die die
WebRequest
wirft Ausnahme von erfolglosen versuche und$response
nicht wirklich gesetzt werden in den Fällen, wo Sie bekommen503
,404
etc. Wenn Sie nicht bekommen, ein Erfolg, Reaktion eingestellt ist, nun, die Antwort ( mit status-code als OK), aber wenn der nächste server wirft einen 404, sagen wir, die Antwort wäre immer noch die OK-Zustand befindet, weil der WebRequest stellt sich nur eine Ausnahme und nicht möglich etwas zu $response. Möchten Sie vielleichttrap
(odertry catch
) die Ausnahme und Griff den Erfolg oder Misserfolg dort oder gesetzt$response
auf null in jeder iteration der Schleife:Verwenden Sie außerdem keine
$_
als die iteration variable, es ist die automatische variable und ist nicht in guter form hier.Beachten Sie, dass das, was yo geschrieben haben, könnte auch für die Verwendung von system-Ressourcen, ( es hing einmal für mich), so entsorgen Sie aus der Reaktion angemessen.
$response = $null
genug sein konnte, aber Sie immer noch in der Nähe die Antwort richtig am Ende der Schleife.$response=$null
funktionierte perfekt!InformationsquelleAutor manojlds
Müssen Sie möglicherweise schließen Sie Ihre Verbindung:
http://msdn.microsoft.com/en-us/library/system.net.webresponse.close(v=vs. 90).aspx
Ich würde es schreiben wie dieses:
Ich habe eine
Remove-Variable
im Fall war es nicht aufgehoben, im Einsatz.vielen Dank für dein feedback zu. Ich habe versucht, Ihre Lösung als gut und es funktioniert!
Kein prob, ich aktualisierte es ein bisschen, bis der volle Weg, ich würde es tun.
Dies hat mir geholfen, in Bezug auf ein anderes problem. Vielen Dank! +1
InformationsquelleAutor Andy Arismendi