コマンドを繰り返し実行する

あけましておめでとうございます。
管理人のHIROです。
本年もよろしくお願いいたします。

早速本題です。

「テキストファイルに記述されているPC名に対してPINGを実行したい」という要望があり、下記のようなスクリプトを作成してみました。
(テキストファイルは1行に1つのPC名が記述されています。)

function Exec-Ping([string]$file)
{
  #指定されたファイルを読み取る
  $pc = Get-Content $file

  #1行ずつPingコマンドを実行する
  for ( $i = 0; $i -lt $pc.Count; $i++ )
  {
    ping $pc[$i]
  }
}

上記スクリプトは、Get-Content でファイルの中身を取得して1行ずつPingコマンドを実行するようにしたものです。
このスクリプトは要望通り動作するのですが、「Pingコマンドオンリー」のスクリプトでしかありません。
せっかくなので、Ping以外のコマンドも繰り返し実行できたら便利だと思い、下記のようにしてみました。

function Exec-Command([string]$cmd,[string]$file)
{
  #指定されたファイルを読み取る
  $content = Get-Content $file

  #ファイルの中身を1行ずつ実行する
  for ( $i = 0; $i -lt $content.Count; $i++ )
  {
    #読み取っておいたファイルの中身から1行取り出す
    $line = $content[$i]
    #任意のコマンドを実行する
    Invoke-Expression "$cmd $line"
  }
}

説明:
上記のスクリプトは2つの引数を持っています。
1つは実行したいコマンドを指定するための $cmd
もう1つはコマンドに与えるオプション文字列が書かれたファイルを指定する $file

たとえば Pingコマンドを実行したい場合は

Exec-Command “Ping” “C:\Work\Pinglist.txt”

とします。
Pinglist.txt に、1行/PCが記述されていれば、その台数分だけのPingが実行されます。

また、$cmd引数に”mkdir”を与えて

Exec-Command “mkdir” C:\Work\mkdirlist.txt

のようにすれば、一気に複数のディレクトリを作成することが可能です。

コメント

  1. Jonnie より:

    I can already tell that’s gonna be super heplufl.

タイトルとURLをコピーしました