2017-09-28 7 views
0

標準の[System.Net.WebRequest]クラスを使用して、指定されたURLのHTTP応答コードを返します。Powershell - ログインでURLを照会してHTTPステータスを返す

URLは、内部Webアプリケーションサーバーを指し、「401 Unauthorized」エラーを返します。これは、スクリプトを実行しているサービスアカウントがアプリケーションに対して有効なアカウントを持っていないため、実際は問題ありません。しかし、私はウェブサイトが反応していることにもっと興味があります。しかし、これはHTTPレスポンスであると私は考えていましたので、これを管理することができましたが、代わりにヌル値として返しました。

$HTTP_Request = [System.Net.WebRequest]::Create('http://google.com') 
$HTTP_Response = $HTTP_Request.GetResponse() 
$HTTP_Status = [int]$HTTP_Response.StatusCode 

Exception calling "GetResponse" with "0" argument(s): "The remote server returned an error: (407) Proxy Authentication Required."

(私たちのサーバが外部サイトへのアクセスをブロックされている。この例ではGoogleのを、使用しています)。

私は、コードとして400エラーを受け付けないので、$HTTP_Status = [int]$HTTP_Response.StatusCodeまでコードに到達できません。

クエリで401(またはこの例では407)を受け入れるにはどうすればよいですか?

ありがとうございました

+0

私はそれが正しいと理解すれば、401 Unauthrisedのためステータスコードに到達できませんか?それはあなたが言っていることですか?私はこれが設計によるものだと思う。 制限されたデータのみを含む401ページにリダイレクトされます。 (その上で私を引用しないでください)。 システムがあなたの資格情報を検証しようとしたのを見ても、サーバーは依然としてオンラインでアクティブであると判断できます。 – Snak3d0c

+0

.netは、あなたのWeb呼び出しがエラーステータスを返したときに、プロキシ/エラーを生成することによってあなたを助けています。 [try catch](https://stackoverflow.com/questions/35986647/how-do-i-get-the-body-of-a-web-request-that-returned-400)にコードをラップする必要があります-bad-request-from-invoke/44000376#44000376)を使用して、エラーが生成されたら処理を続行します。 – brendan62269

+0

Snak3d0c - 確かに私が言っていることです。はい、資格情報を処理して、ウェブサイトが実際に応答していることを示していますが、私は200 OKを得ていません。 URLは私を/login.aspx画面に移動させますが、何らかの理由で自動ログオンしているため、401エラーが表示されます – JDGEEK

答えて

1

ありがとうございました!

try{ 
    $request = $null 
    $request = Invoke-WebRequest -Uri "<URL>" 
    } 
catch 
    {    
    $request = $_.Exception.Response    
    } 
    $StatusCode = [int] $request.StatusCode; 
    $StatusDescription = $request.StatusDescription; 
関連する問題