Ping コマンドの実行結果にタイムスタンプを付加したい

Windows のコマンドプロンプトで Ping を実行する際に、実行結果にタイムスタンプを付加させたいことはないでしょうか。

本記事では Ping の実行結果にタイムスタンプを付加させる方法をご紹介します。

コマンドプロンプトでの Ping の実行結果

コマンドプロンプトで Ping を実行すると、以下のように結果が表示され、タイムスタンプは付加されません。

Windows の Ping コマンドの代表的なオプションには以下がありますが、タイムスタンプを付加するオプションはありません。

オプション 説明
-n 回数の指定
-l パケットサイズの指定
-t 継続して実行

Ping の実行結果にタイムスタンプを付加する

コマンドプロンプトでタイムスタンプを付加することはできませんが、PowerShell でパイプライン「 | 」を使うことで Ping の実行結果にタイムスタンプを付加することができます。

パイプラインはコマンドレットの実行結果を次の処理に渡すための仕組みです。

コマンド

ping 192.168.11.1 | %{(get-date).tostring() +" "+$_}

実行結果は以下のように左側に日時が付加されて表示されます。

|(パイプ)以降の説明

# コマンド 説明
1 %{} パイプラインによって渡された実行結果に対して中括弧{}内の処理を繰り返し実行する
2 (get-date).tostring() 日時の出力
3 $_ パイプラインによって渡されたオブジェクトの変数(「ping 192.168.11.1」の実行結果を出力)
4 " " スペース(#2と#3の間にスペースを入れて結合する)
5 + 文字の結合

イメージ図


スクリプトによる実行

PowerShell スクリプトファイル(.ps1)

故障切り分け等で複数の機器に対して定期的に Ping を実行したい場合は PowerShell スクリプトファイル(.ps1)にしておくと便利です。

以下は、192.168.11.1に Ping を継続実行し、実行結果を C:\tmp\log\ 配下に出力します。

##変数定義
$Address = "192.168.11.1"
$Date = Get-Date -Format "yyyyMMdd-HHmm"
$LogPath = "C:\tmp\log\"

##Ping実行
echo ${Address}へPing実行中
echo 実行結果は、${LogPath}${address}_${Date}.txtに出力中
echo Pingを停止する場合は[Ctrl + C]を実行してください!
ping -t $address | %{(Get-Date).ToString() + " $_"} >> ${LogPath}${address}_${Date}.txt

実行するとこのようになります。

実行結果はこのように出力されます。

bat ファイル

対象機器が複数ある場合は、機器ごとに上記スクリプトファイルを作成し bat ファイルで実行できるようにすると便利です。

PowerShell スクリプトファイルを ping01.ps1、ping02.ps1 という名前で作成し、bat ファイルを同じ階層で実行する場合は以下のように記載します。

start powershell -NoProfile -ExecutionPolicy Unrestricted ./ping01.ps1
start powershell -NoProfile -ExecutionPolicy Unrestricted ./ping02.ps1

おわりに

本記事では、Ping の実行結果にタイムスタンプを付加する方法を紹介しました。

切り分け等で Ping を実行する際は是非お試しください。

執筆担当者プロフィール
T.Taguchi

T.Taguchi(日本ビジネスシステムズ株式会社)

流通事業本部に所属しています。主にお客様先に常駐して運用保守業務に携わっています。

担当記事一覧