適材適所

PowerShellやVBAなどプログラミング系の話多めで

PowerShellでpingにタイムスタンプを付加する

pingコマンド、超便利ですよね。

私なんか、デスクにいるときの90%はping打ってますからね。

それぐらいpingは打ちますね。

そんなpingコマンドを愛して止まない私ですが、一つ不満が。

コマンドの結果にタイムスタンプがないんですね。

ping yahoo.co.jp

yahoo.co.jp [182.22.59.229]に ping を送信しています 32 バイトのデータ:
182.22.59.229 からの応答: バイト数 =32 時間 =40ms TTL=53
182.22.59.229 からの応答: バイト数 =32 時間 =41ms TTL=53
182.22.59.229 からの応答: バイト数 =32 時間 =41ms TTL=53
182.22.59.229 からの応答: バイト数 =32 時間 =48ms TTL=53

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

何時何分の結果かわかりません。

特にネットワークのテスト等で、

-tオプションをつけて連続で打つときなどは、

いつの時点で接続が切れて、接続されて、切断時間はどのくらいで・・・

ということを知りたかったりします。

そんなときはPowerShellを使ってpingの結果にタイムスタンプを付加してあげましょう!

PowerShellでタイムスタンプを付加

 
ping google.com -t|?{$_ -ne ""}|%{(get-date).tostring() +" "+$_}

処理結果

2020/07/20 22:12:33 google.com [2404:6800:4004:807::200e]に ping を送信しています 32 バイトのデータ:
2020/07/20 22:12:33 2404:6800:4004:807::200e からの応答: 時間 =7ms
2020/07/20 22:12:34 2404:6800:4004:807::200e からの応答: 時間 =8ms

タイムスタンプが付加されました!!

これで、ネットワークの切断や接続があったとき、日時が一目瞭然ですね。

pingコマンドの結果は単純な文字列ですが、

PowerShellでは改行を含んだ文字列を配列として扱うことができます。

下記のコマンドを実行すると、

文字列が配列であることが確認できます。

 
$ping=ping google.com
$ping -is [array]

処理結果

True

配列として扱われることを利用し、

パイプラインで空白以外のものを抽出して

Get-Dateコマンドを各要素の先頭にくっつけているだけです。

Get-DateのToStringメソッドに書式を指定してあげれば、

お好みに応じて出力する日時をカスタマイズでき、柔軟性も◎。

時間だけ付加する

 
ping google.com -t|?{$_ -ne ""}|%{(get-date).tostring("hh:mm:ss") +" "+$_}

処理結果

10:19:59 google.com [2404:6800:4004:809::200e]に ping を送信しています 32 バイトのデータ:
10:19:59 2404:6800:4004:809::200e からの応答: 時間 =7ms

細かい応答時間を付加したい

 
ping google.com -t|?{$_ -ne ""}|%{(get-date).tostring("hh:mm:ss:ffff") +" "+$_}

処理結果

10:29:35:9098 google.com [2404:6800:4004:807::200e]に ping を送信しています 32 バイトのデータ:
10:29:35:9138 2404:6800:4004:807::200e からの応答: 時間 =7ms
10:29:36:9167 2404:6800:4004:807::200e からの応答: 時間 =7ms

.NETの書式のおかげで、かなり柔軟に設定ができるのがいいですね!!

完全なる余談

普段あまり、というか全く意識することはないのですが、

この記事を書くためにGoogle様にpingを送ったら、

IPアドレスがIPv6になっていたので、一瞬間違えたかと思いました。

あまり見慣れないもんで、びっくりしてしまいました・・・。

他の主要ななサイトはどうなっているのかpingを打ってみたら、

youtubeやyahooもIPv6アドレスになっていました。

少し前はIPv4だったような・・・。

あ、もしかして、うちの光回線がIPv6に対応したからでしょうか。

それはさておき、インターネットの世界も、

少しずつIPv6が主流になっていくんですね。

終わりに

PowerShellを使って、pingにタイムスタンプを付加する方法を紹介しました。

ぜひネットワーク系のテストや通信機器の簡単な生存確認などにお役立てください。

たまには外部のサービスに迷惑にならない程度にpingを打つと、

時代の流れを感じることができますね・・・。

気づいたら今回のテーマと全く関係ない

締めになってしまいましたが・・・。

ということで、ここまでお読みいただき、ありがとうございました。

PowerShellでpingをどうこうしている関連記事

www.tekizai.net

www.tekizai.net

www.tekizai.net

www.tekizai.net