はじめに
遠方の拠点から「インターネットやシステムへの接続が遅い」という問い合わせがよくあるが、通常時の速度を定点測定していないため遅さが体感速度でしか計れず、速度を計る指標がないという問題を抱えている。
まずはお金をかけずに複数拠点-本社間の通常状態での通信速度を収集したいと考え、
Powershellにてスクリプトを作成した。
環境
Windows10 22H2 64bit Pro
Powershell 5.1.19041.2364
処理内容
ping_v1.ps1
#ログファイル名へ付加するタイムスタンプのフォーマット
$date = Get-Date -Format _yyyy_MMdd_HHmmss
#pingの送信先を記載したtarget.txtを$fileへ格納
$file = Get-Content ".\target.txt"
#ログファイルの出力先として、ユーザープロファイル(%userprofile%)のパスを$outputへ格納
$output = $env:USERPROFILE
foreach ($target in $file) {
#$fileに記載された宛先へ一度pingを送信
$p=ping $target -n 1
#pingの結果から統計情報等を除いた部分をユーザープロファイル直下へ出力
$p[1]+$p[2] >> $output\pinglog_$date.txt
}
target.txt記載例
target.txt
8.8.8.8
www.yahoo.co.jp
使い方
- [target.txt]を作成し、pingを送付したいホスト名 or IPアドレスを記載。
アドレス1つごとに改行する。 - [target.txt]、[ping_v1.ps1]を同一ディレクトリに配置する。
- [ping.ps1]を実行
- 実行ユーザーのユーザープロファイル直下に[pinglog_"yyyy_MMdd_HHmmss".txt]が出力される
ログの例
8.8.8.8 に ping を送信しています 32 バイトのデータ:8.8.8.8 からの応答: バイト数 =32 時間 =14ms TTL=115
edge12.g.yimg.jp [182.22.25.124]に ping を送信しています 32 バイトのデータ:182.22.25.124 からの応答: バイト数 =32 時間 =15ms TTL=56
余談
本当はping結果をそのままテキストに出力ではなく、宛先と応答時間(ms)をテーブル形式で表示させたかったが
powershellの習熟度が足りず断念。。。と思っていたらうまくいった。
ping_v2.ps1
#ログファイル名へ付加するタイムスタンプのフォーマット
$date = Get-Date -Format _yyyy_MMdd_HHmmss
#pingの送信先を記載したtarget.txtのパスを$fileへ格納
$file = Get-Content ".\target.txt"
#ログファイルの出力先として、ユーザープロファイル(%userprofile%)のパスを$outputへ格納
$output = $env:USERPROFILE
#ハッシュテーブル$arrayを作成
$array = @{}
foreach ($target in $file) {
#$fileに記載された宛先へ一度pingを送信し$pへ結果を格納
$p=ping $target -n 1
#応答速度が =xxmsという形式になっている為、=を削除し$p1へ格納
$p1 = $p[1]+$p[2] -replace "=", ""
#半角スペースを区切り文字とし配列化、$p2へ格納
$p2 = $p1.split(" ")
#$arrayへ宛先、応答速度を追加
$array.add($p2[0],$p2[10])
}
#$arrayをテキスト形式でユーザープロファイル直下へ出力
$array >> $output\pinglog_$date.txt
Name Value
---- -----
edge12.g.yimg.jp 26ms
8.8.8.8 17ms
参考にさせていただいたページ