Bar

PowerShell 複数のコマンドプロンプトを引数付きで実行するサンプル

PowerShell Start-Procee コマンドレットの使い方がよく分かっていなかったので覚えた内容をメモします。
今回は、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"
}

サンプルの流れです。
  1. 複数のIPアドレスを配列変数$arrIpsに格納
  2. ForEach-Object コマンドレットを使って$arrIpsの値を一つずつ取り出す
  3. Start-Procee コマンドレットでコマンドプロンプトを実行
  4. 引数(-ArgumentListパラメータ)にPingコマンドをセット
ArgumentList パラメータに指定したコマンド
  • /c
    cmd.exeのオプション。
    "文字列" に指定されたコマンドを実行した後、終了します。
  • ping
    pingコマンド。
  • $_
    送信先となるIPアドレス(192.168.1.100など)
  • -t
    連続送信するオプション
このサンプルを実行すると3つのコマンドプロンプト画面が表示され、各画面にPingの応答結果が常に表示されます。

外部アプリケーションの起動も可能

今回はコマンドプロンプトを複数実行しPingを送信する内容ですが、バッチ ファイルや外部アプリケーションの実行も可能だと思います。
是非PowerShellを使ってみてください。
余談:Test-Connection コマンドレットを使えばいいのではないか?
PowerShell にはTest-Connection コマンドレットがあります。
このコマンドレットはPing(ICMP エコー要求パケット)を1台または複数台に送信、間隔を任意に変更などできますが、私が使った限り応答が遅いで使い分けでいます。
またpingコマンドの連続送信オプションが見当たらないので、ループ処理の作りこみが必要だったりもするので、手軽さでいえばPing コマンドの方に軍配があがります。
時と場合によって使い分けれればよいですね。