🌐

PowerShell でつくってみた

2024/02/18に公開

コマンドプロンプトのping

ネットワークの接続状況を調べるためにpingというコマンドが便利らしい。
というわけで、下記みたいなコマンドを入力して社内サーバーへの接続を調べた。
google.comを社内サーバーのアドレスに変えるだけ)

ping google.com

これは4回だけpingを飛ばす方法でこんな感じで結果が返ってくる。

google.com [142.251.42.142]に ping を送信しています 32 バイトのデータ:
142.251.42.142 からの応答: バイト数 =32 時間 =5ms TTL=116
142.251.42.142 からの応答: バイト数 =32 時間 =6ms TTL=116
142.251.42.142 からの応答: バイト数 =32 時間 =5ms TTL=116
142.251.42.142 からの応答: バイト数 =32 時間 =8ms TTL=116

142.251.42.142 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 5ms、最大 = 8ms、平均 = 6ms

ちょっと調べてみると-tをつければ無限にpingを飛ばし続けてくれるらしい。

ping -t google.com

そうすると応答は以下のようなのがひたすら続く(中止するときはCtrl+Cを押す)

google.com [142.251.42.142]に ping を送信しています 32 バイトのデータ:
142.251.42.142 からの応答: バイト数 =32 時間 =5ms TTL=116
142.251.42.142 からの応答: バイト数 =32 時間 =6ms TTL=116
142.251.42.142 からの応答: バイト数 =32 時間 =6ms TTL=116
142.251.42.142 からの応答: バイト数 =32 時間 =5ms TTL=116
142.251.42.142 からの応答: バイト数 =32 時間 =6ms TTL=116
142.251.42.142 からの応答: バイト数 =32 時間 =6ms TTL=116

これをずっと流し続ければ、リアルタイムで接続状況が分かる。
でも・・・接続状況を記録したいときは不便だ。

PowerShell だとかなりシンプルになる

ChatGPTに聞いたりして、どうやらPowerShellのほうがいろんなことができるらしいことが分かった。
Powershellだとpingの代わりにTest-Connectionがある。
そして、便利なことに-Quietとつけると、結果はTrueFalseの2値だけになる。
あとはGet-Dateと組み合わせて、テキストファイルに出力するようにする。

connect.ps1
$server = "google.com"
for ($i = 0; $i -lt 10; $i++) {
    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    $pingResult = Test-Connection -ComputerName $server -Count 1 -Quiet
    $result = if ($pingResult) {"OK"} else {"NG"}
    $logLine = "${timestamp}: [$server] $result`n"
    Add-Content "C:\Users\Desktop\result.txt" $logLine
    Start-Sleep -Seconds 1
}

するとこういう感じで、時系列の接続状況を記録することができた。

2024-02-13 23:08:57: [google.com] NG
2024-02-13 23:09:00: [google.com] NG
2024-02-13 23:09:03: [google.com] NG
2024-02-13 23:09:06: [google.com] NG
2024-02-13 23:09:09: [google.com] NG
2024-02-13 23:09:36: [google.com] OK
2024-02-13 23:09:40: [google.com] OK
2024-02-13 23:09:43: [google.com] OK
2024-02-13 23:09:46: [google.com] OK
2024-02-13 23:09:49: [google.com] OK

大変勉強になった。

Discussion