今回は、PowerShell を使って”複数のコマンドプロンプトを引数付きで実行”する方法です。
背景
システム管理をされている方ならよくあるかと思いますが、決まった複数のサーバー/クライアント/ネットワーク装置に対しPingの応答速度を確認する事があると思います。出先や小さい企業だとよくあるんではないかと・・・
装置分のコマンドプロンプトを起動しPingコマンドをtオプション付きで実行・・・正直面倒なので、1アクションで確認できる簡単なスクリプトを書いてみました。
サンプル
サンプルはこちら。#Ping送信先を配列へ格納 $arrIps = "192.168.1.100","192.168.1.150","192.168.1.200" $arrIps | ForEach-Object{ Start-Process -FilePath cmd.exe -ArgumentList "/c ping $_ -t" }
サンプルの流れです。
- 複数のIPアドレスを配列変数$arrIpsに格納
- ForEach-Object コマンドレットを使って$arrIpsの値を一つずつ取り出す
- Start-Procee コマンドレットでコマンドプロンプトを実行
- 引数(-ArgumentListパラメータ)にPingコマンドをセット
- /c
cmd.exeのオプション。
"文字列" に指定されたコマンドを実行した後、終了します。 - ping
pingコマンド。 - $_
送信先となるIPアドレス(192.168.1.100など) - -t
連続送信するオプション
外部アプリケーションの起動も可能
今回はコマンドプロンプトを複数実行しPingを送信する内容ですが、バッチ ファイルや外部アプリケーションの実行も可能だと思います。是非PowerShellを使ってみてください。
余談:Test-Connection コマンドレットを使えばいいのではないか?
PowerShell にはTest-Connection コマンドレットがあります。このコマンドレットはPing(ICMP エコー要求パケット)を1台または複数台に送信、間隔を任意に変更などできますが、私が使った限り応答が遅いで使い分けでいます。
またpingコマンドの連続送信オプションが見当たらないので、ループ処理の作りこみが必要だったりもするので、手軽さでいえばPing コマンドの方に軍配があがります。
時と場合によって使い分けれればよいですね。