Ich schrieb ein kleines PowerShell-Skript, um eine Anfrage an einen Server zu senden und ein einfaches XML-Ergebnis zurück zu bekommen.Warum sind Invoke-WebRequest und Invoke-RestMethod gleichzeitig fehlgeschlagen und erfolgreich?
Powershell-Skript
$xml = "<?xml version='1.0' encoding='utf-8'?><Search><ID>278A87E1-1BC2-4E19-82E9-8BBE31D67D20</ID></Search>"
$response = Invoke-RestMethod -Method Post -Uri "http://localhost/search" -ContentType "application/xml" -Body $xml
Das ist es, wirklich einfach und es gibt keinen Grund, dass ich sehen kann, denn es scheitern. Ich habe auch versucht, das Skript mit Invoke-WebRequest
und beide fehlschlagen. Der zurückgegebene Fehler ist Invoke-RestMethod : Value cannot be null. Parameter name: name
. Die seltsame Sache ist, dass, wenn ich dies mit Wireshark
überwachen, sehe ich die Verbindung, sehe ich die POST
und ich sehe das Ergebnis vom Server und alles sieht perfekt gut, aber das Cmdlet sagt, es ist fehlgeschlagen (und ja, der Returncode ist 200).
Wenn ich den Invoke-WebRequest
/Invoke-RestMethod
mit dem -OutFile
Parameter ausführen, läuft es gut ohne Fehler und speichert das Ergebnis in der angegebenen Datei; -OutVariable
schlägt fehl, falls Sie sich fragen.
Das Ergebnis ist eine XML-Datei, die Header geben an, dass es xml ist und das XML ordnungsgemäß formatiert ist.
Ergebnis, wenn erfolgreich
<?xml version="1.0" encoding="UTF-8" ?>
<Result version="1.0" xmlns="urn:xmlns-org">
<searchID>{278a87e1-1bc2-4e19-82e9-8bbe31d67d20}</searchID>
<responseStatus>true</responseStatus>
<responseStatusStrg>MORE</responseStatusStrg>
<numOfMatches>40</numOfMatches>
</Result>
Weiß jemand, warum die Invoke-XXX
Cmdlets ein Fehler zurückgegeben und was ich kann es zu beheben tun? Auch hier funktioniert es einwandfrei, wenn ich den Parameter -OutFile
verwende. Selbst wenn es fehlschlägt, kann ich eine korrekte Konversation zwischen dem Skript und dem Server in Wireshark
sehen.
Auch, wenn ich -Verbose
verwenden es sagt mir folgendes:
VERBOSE: POST http://localhost/search with -1-byte payload
VERBOSE: received X-byte response of content type application/xml; charset="UTF-8"
Wo X-byte
die tatsächliche Größe der Antwort ist, aber es unterscheidet sich offensichtlich mit jeder Antwort auf die an den Server gesendeten Daten abhängig. Ich finde es nur seltsam, dass das Cmdlet fehlschlägt, aber sagt, dass es eine Antwort mit Daten empfangen hat und dass es eine -1-byte
Nutzlast gesendet hat.
Ich stoße auf dieses Problem mit Python 2.7 'SimpleHTTPServer'. – Kupiakos
Vielen Dank für die Entdeckung der Ursache. Ich habe dieses Manifest in einer vollständig gepatchten Windows Server 2012 R2-Box mit installierter PowerShell (WMF) 5.1 gesehen. Nehmen Sie den gleichen Code auf Windows 10 oder Windows Server 2016 und es gibt kein Problem. Sehr enttäuschend, da scheint es keine Lösung zu geben. – Lewis