2019/01/16

HTTP(S) の応答をチェックする PowerShell スクリプト(checkurl.ps1)v4

PowerShell で HTTP/HTTPS の応答を確認する方法はネットを検索するといろいろ出てきますが(System.Net.ほにゃらら...を利用したものなど)、自分用に Invoke-WebRequest コマンドレット(PowerShell 3.0 以降)を利用したもの(checkurl.ps1)を適当に書いてみた。(影のお題は、プロ棋士 プロキシ越しの HTTP(S) 応答チェック)

(追記:スクリプトをまた修正したのでタイトルに v4 に変更)


ちなみに、HTTP Error の行の処理が実行されることはないかもしれない。エラーはすべてWebException のほうに流れると思う。

HTTPS 接続の場合、http://を省略しても機能するかも。

checkurl.ps1](v3, 2019/01/31)
param($targeturi)
# Using TLS 1.2 only for HTTPS connection
# [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
[Net.ServicePointManager]::SecurityProtocol = @([Net.SecurityProtocolType]::Tls,[Net.SecurityProtocolType]::Tls11,[Net.SecurityProtocolType]::Tls12)
# Check PSVersion
if ($PSVersiontable.PSVersion.Major -lt 3) {
  Write-Host "To use this script, you need Windows PowerShell 3.0 or later."
  exit
}
if ($targeturi -eq $null) {
  Write-Host "Usage: .\checkurl.ps1 http(s)://..."
  exit
}
try {
  $httpstatuscode = (Invoke-WebRequest $targeturi).StatusCode
  if ($httpstatuscode -lt 400) {
    Write-Host "OK:"$httpstatuscode
  } else {
    Write-Host "HTTP Error:"$httpstatuscode
  }
}
catch [System.Net.WebException]
{
#    Write-Host "Invoke-WebRequest Error:"$error[0].Exception
    Write-Host "Invoke-WebRequest Error:"$error[0].Exception.Message

}

※ [Net.ServicePointManager]::SecurityProtocol の行は、HTTPS の接続に TLS 1.0/1.1/1.2 を使用するように明示。これは、Windows 10 ver 1809(RS5)の既定。SSL 3.0 を使用したいなら[Net.SecurityProtocolType]::Ssl3 をお仲間に。Windows 10 ver 1803 以前の既定は SSL 3.0 と TLS 1.0(Ssl3, Tls)で、 [Net.ServicePointManager]::SecurityProtocol の行がないと、Invoke-WebRequest による TLS 1.2 のみサイトへの接続がエラーになります。なお、システムがサポートしないプロトコルがあるとエラーになるかもしれないので、その場合はこの行を調整して。システムがサポートするプロトコルは PowerShell で [enum]::GetNames([Net.SecurityProtocolType]) と打つと確認できます。

※(2019/1/31、v4) $error[0].Exception を $error[0].Exception.Message に変更。これで"場所 Microsoft.PowerShell.Commands... ”の出力を抑制できるはず。こんな↓感じ。


※(2019/1/31、v4) TechNet Script Center に登録 → PowerShell script for checking HTTP(S) response


関連:
Invoke-WebRequest で Live.Sysinternals.com からダウンロード失敗の回避  (2018/11/06)

プロキシ サーバー越しの応答チェック

何をしたかったのかというと、telnet や PortQuery v2(Portgry.exe)PsPing(Sysinternals) による HTTP(S) ポートの接続性チェックは、プロキシ サーバーを経由する環境だとできませんが..

目論見どおり、プロキシを超えての HTTP 応答のチェックができました。(確認のため、デフォルト ゲートウェイ空にして、インターネットから完全に切断してテスト)

(checkurl.ps1 は Windows 8.1/Server 2012 以降なら標準で、Windows 7/Server 2008 R2 以前なら PowerShell 3.0 以降にすれば使えると思います。.NET Core 6/PowerShell 6 環境は未確認、何かしら修正が必要と思う)

0 件のコメント: