Invoke-WebRequestが500,401,403などになると出力をキャプチャするにはどうすればよいですか?呼び出しが成功すると、結果は$Response
変数に格納されますが、401がヒットした場合はエラーがスローされますが、レスポンスは格納されません。失敗時に応答をキャプチャする/ 401 Invoke-WebRequest
$Response = Invoke-WebRequest -Method HEAD -Uri 'https://site.contoso.com'
Invoke-WebRequest : The remote server returned an error: (401) Unauthorized.
At line:1 char:13
+ $Response = Invoke-WebRequest -Method HEAD -Uri 'https://site.contoso.com' -Erro ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
$Response
変数は、例外として処理されるので、それは単にのPowerShellによって捕捉されていない、しかし、エンドポイントは401の不正とヘッダを返して、ヌルのままです。フィドラーを通してこれを確認します。
[System.Net.WebRequest]
を使用してリクエストを作成すると、$Response = $WebRequest.GetResponse()
を実行した場合と同じ結果になります。
ここは私の$PSVersionTable
です。
Name Value
---- -----
PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.36373
BuildVersion 6.3.9600.16406
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2
ため
クレジットありがとうございました - この方法ははるかに直感的で柔軟な私が思い付いたものよりもあります。 – Taylor
あなたはそれが好きで、うれしい幸せ。ボーナスとして、$ bodyを使用するように関数を変更したり、ヘッダーを$ morefとして保存すると、それらのグローバル変数もトラブルシューティングのために取得されます。その機能は本当に役に立ちます。 – FoxDeploy
ありがとうございました - このシナリオでは、私は* 401を期待するスクリプトを書いていましたが、ヘッダーを抽出する必要があります。 – Taylor