PowerShell 関連のメモを置いておきます。
curl で HTTPステータスコードを取得
# 正常
Write-Output(curl -sf -o nul -w "%{http_code}" https://www.google.com/)
# 200
# 存在しないページ
Write-Output(curl -sf -o nul -w "%{http_code}" https://www.google.com/aaaaa)
# 404
# サーバが見付からない
Write-Output(curl -sf -o nul -w "%{http_code}" https://example.comuuuuuuuun)
# 000
例えばこんな感じ。
……ところで、最後のそもそもサーバが見付からない場合のHTTPステータスコードは 000
と出力されとなると、これは Integer とかではなく String ということですよね?
確認します。
$hoge = curl -sf -o nul -w "%{http_code}" https://www.google.com/
$fuga = curl -sf -o nul -w "%{http_code}" https://www.google.com/aaaaa
$piyo = curl -sf -o nul -w "%{http_code}" https://example.comuuuuuuuun
Write-Output $hoge.GetType().FullName
# System.String
Write-Output $fuga.GetType().FullName
# System.String
Write-Output $piyo.GetType().FullName
# System.String
やはり。
Test-NetConnection の戻り値
続いて Test-NetConnection
の戻り値について。
$hogera = Test-NetConnection 192.0.2.1 -Port 25
Write-Output($hogera.GetType().FullName)
# TestNetConnectionResult
これは専用のオブジェクトですかね。
Write-Output(Test-NetConnection 192.0.2.1 -Port 25)
# ComputerName : 192.0.2.1
# RemoteAddress : 192.0.2.1
# RemotePort : 25
# InterfaceAlias : Ethernet
# SourceAddress : 192.0.2.101
# TcpTestSucceeded : True
通常、 Test-NetConnection
はこのような結果を返すので、それぞれがプロパティ名であると推測できます。であれば……。
$hogera = Test-NetConnection 192.0.2.1 -Port 25
Write-Output($hogera.GetType().FullName)
Write-Output($hogera.TcpTestSucceeded)
# True
Write-Output($hogera.TcpTestSucceeded.GetType().FullName)
# System.Boolean
やはり。プロパティ TcpTestSucceeded
を持ち、その値は Boolean 型ですね。
ということは、 Test-NetConnection
の結果を直接 Return するラッパー関数を用意してあげれば汎用的に取り回せそうです。
DNS の名前解決
try {
$result = Resolve-DnsName -Name www.example.co.jp -Server 192.0.2.1 -NoHostsFile -QuickTimeout
return $True
}
catch {
return $False
}
ドメイン・DNSサーバ指定。 hosts
ファイル不使用。なお、タイムアウト時はエラーになるので try ... catch
でエラーハンドリングしておきます。
コンソールのエラーを非表示にする
$ErrorActionPreference = 'silentlycontinue'
参考
PowerShell の命名規則
curl
Test-Connection, ping
Test-NetConnection
- 【Windows】Test-NetConnectionでポートの疎通を確認する | TechLog
- PowerShell で特定 TCP ポートが開いているか確認する
- PowerShell 2行でメール送信 (SMTP認証) – Qiita