pingコマンド、便利なんですが、コマンドを打った時間が表示されないのがネック。
ネットワークのテストで、-tコマンドを使って連続で打つときなどは、いつの時点で接続が切れて、
接続されて、ということを知りたい場面は多いかと思います。
そんなときはPowerShellを使ってワンライナーでタイムスタンプを付加すると、簡単便利なので紹介していこうと思います。
普通に打つと
PS C:\> ping google.com -t google.com [2404:6800:4004:807::200e]に ping を送信しています 32 バイトのデータ: 2404:6800:4004:807::200e からの応答: 時間 =7ms 2404:6800:4004:807::200e からの応答: 時間 =8ms
もちろん日時は表示されません。
ただ、pingの結果だけが返ってきます。
PowerShellでタイムスタンプを付加
PS C:\> 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ではその返り値を、改行を区切りとして文字列の配列として扱います。
下記のコマンド確認できます。
PS C:\> $ping=ping google.com PS C:\> $ping -is [array] True
配列として扱われることを利用して、パイプラインで空白以外のものを渡し、Get-Dateコマンドを各要素の先頭にくっつけているだけです。
Get-DateのToStringメソッドに書式を指定してあげれば、お好みに応じて出力する日時をカスタマイズできるので便利です。
時間だけ
PS C:\> 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
細かい応答時間を知りたい
PS C:\> 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を打つと、時代の流れを感じることができますね・・・。
気づいたら今回のテーマと全く関係ない締めになってしまいましたが・・・。
ここまでお読みいただき、ありがとうございました。