(追記:スクリプトをまた修正したのでタイトルに 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
}
# 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 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。