小さなPowerShellスクリプトを書いて、サーバーにリクエストを送信し、簡単なXML結果を返します。 、本当にシンプルだし、それが失敗するために、私は見ることができない理由はありませんInvoke-WebRequestとInvoke-RestMethodが同時に失敗し、成功するのはなぜですか?
のPowerShellスクリプト
$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
。私もInvoke-WebRequest
でスクリプトを試してみましたが、どちらも失敗します。返されるエラーはInvoke-RestMethod : Value cannot be null. Parameter name: name
です。奇妙なことは、Wireshark
でこれを監視すると、接続が表示され、POST
が表示され、サーバーからの結果がすべて表示されるようになりますが、コマンドレットは失敗していると言います(そして、戻りコードは200 )。
-OutFile
パラメータを使用してInvoke-WebRequest
/Invoke-RestMethod
を実行すると、エラーなしで正常に実行され、結果が指定されたファイルに保存されます。 -OutVariable
が不思議に思っている場合に備えて失敗します。
結果は、XMLファイルで、ヘッダは、それがXMLであり、XMLが正しくフォーマットされていることを指定します。
結果とき
<?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>
成功Invoke-XXX
コマンドレットがエラーを返していると私はそれを修正するために何ができるの理由を誰もが知っていますか?繰り返しますが、-OutFile
パラメータを使用すると完全に正常に動作し、失敗してもスクリプトとサーバーの間の適切な会話がWireshark
に表示されます。私は-Verbose
を使用する場合
また、それは私に次のように伝えます:
X-byte
は応答の実際のサイズですが、それは明らかにサーバーに送信されたデータに応じて、各応答と異なり
VERBOSE: POST http://localhost/search with -1-byte payload
VERBOSE: received X-byte response of content type application/xml; charset="UTF-8"
。コマンドレットが失敗するのは間違いですが、データで応答を受け取り、-1-byte
ペイロードを送信したと言います。
私はこの問題をPython 2.7の 'SimpleHTTPServer'で実行しています。 – Kupiakos
根本原因を発見してくれてありがとう。 PowerShell(WMF)5.1がインストールされた、完全にパッチが当てられたWindows Server 2012 R2ボックスでこのマニフェストを確認しました。 同じコードをWindows 10またはWindows Server 2016に適用しても問題はありません。解決策に見えないので、非常に残念です。 – Lewis