コマンドプロンプトではなくPowershellを使ってpingを打つ
PowerShellを使って、連続でpingを送るワンライナーです。
システムを管理していると、よく使うping。
新たに固定IPアドレスを振る場合に対象のIPアドレスが使われてないか確認したり、ネットワーク上の機器の簡便な生存確認、ネットワーク障害時など、出番は多岐に渡ります。
昔からあるコマンドなので、コマンドプロンプトで使う人も多いですが、PowerShellでももちろん使えます。
PowerShellの方が出力をパイプで渡したり、出力を編集することが容易なのでPowerShellで使った方が私的には◎です。
そんなPowerShellを使って、ちょっとしたときに連続したIPアドレスにpingを送るときに、私がよく書くワンライナーの紹介です。
大した話ではないですが、パイプラインの使い方などがPowerShellっぽいなぁと思ったので、紹介しようと思います。
コマンド
例)192.168.1.1~192.168.1.10へpingを送る 多くの企業で使われているであろうクラスCを想定。
1..10|%{ping "192.168.1.$_"}
これだけです。PowerShellでは、「..」が連続した数字を表します。
1..10と書いて実行すると、こんな感じ表示されます。
PS C:\> 1..10 1 2 3 4 5 6 7 8 9 10
この機能は、ループの回数が決まっているループ処理をする際にも重宝します。
特にこの機能は、for文の代りに使うことができます。例えばこのように。
PS C:\> 1..10|%{"script"} script script script script script script script script script script
ここでは「script」という文字列を書いているだけですが、ここに(本当にちゃんとした)スクリプトを書けば、そのスクリプトを10回処理することができます。
これを利用して、1..10をパイプラインで渡してあげます。
そして、パイプラインに渡された数値を、ForEach-Objectのエイリアスである、%で受け取り、ひとつずつ処理します。
スクリプトブロックの中は、pingで処理します。
pingの引数にある、$_変数はパイプラインから渡されたオブジェクトです。
この場合はパイプラインから数字が渡されるので、展開可能なダブルクォーテーションを使って、ネットワークアドレスと一緒に囲んであげます。
そうすることで、192.168.1.1~192.168.1.50までの連続したIPアドレスを生成することができます。
pingコマンドを取って実行してみるとこのようにIPアドレスが生成されていることが確認できます。
PS C:\>1..10|ForEach-Object{"192.168.1.$_"} 192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4 192.168.1.5 192.168.1.6 192.168.1.7 192.168.1.8 192.168.1.9 192.168.1.10
ちなみにPowerShellには、pingよりも高性能なTest-Connectionコマンドもありますが、多くの場合、pingを使えば済むケースが多い気がします。
Test-Connectionは速度的に遅いみたいですし・・・。
そこまで高性能である必要もなく、pingで十分だけの場合も多々あります。
1..10の部分や、ネットワークアドレスの部分(ここでは192.168.1)を変更すれば、柔軟に対応することができるかと思います。
おわりに
PowerShellっぽいpingの連続送信について紹介しました。
地味な例ではありますが、PowerShellの文法の例としても面白いと思ったので取り上げてみました。
ここまでお読みいただき、ありがとうございました。