業務現場では、複数のPCに対して一括でコマンドを実行したい場面が頻繁にあります。たとえば、ソフトウェアのアップデートやログ収集、サービスの再起動など、個別に実行するには手間とミスが伴います。
本記事では、バッチファイルを使ってLAN内の複数PCにコマンドを遠隔実行する方法を解説します。代表的なツール「PsExec」を使った方法を中心に、前提条件やセキュリティ上の注意点も併せて紹介します。
遠隔実行に使うツール:PsExecとは
PsExec は、Microsoftが提供するSysinternalsツールの一部で、リモートPC上でコマンドを実行できる軽量なツールです。インストール不要で使えるため、管理用バッチとの相性も抜群です。
公式ダウンロード先:

基本的な構文
PsExecの基本的な構文は以下の通りです。
psexec \\[リモートPC名またはIP] -u [ユーザー名] -p [パスワード] cmd /c "実行するコマンド"
たとえば、リモートPCで電源情報を取得するには以下のように記述します。
psexec \\192.168.1.10 -u admin -p password cmd /c "powercfg /batteryreport"
複数PCに対して一括実行するバッチ
複数のPCに対して処理を行うには、IPやホスト名のリストを用意し、ループで処理します。
@echo off
setlocal
set "USER=admin"
set "PASS=yourpassword"
set "COMMAND=ipconfig"
for /f %%H in (host_list.txt) do (
echo --- %%H への実行開始 ---
psexec \\%%H -u %USER% -p %PASS% cmd /c "%COMMAND%"
echo --- %%H の処理終了 ---
)
endlocal
host_list.txt
には、実行対象のホスト名やIPアドレスを1行ずつ記載しておきます。
host_list.txtの例
192.168.1.101
192.168.1.102
192.168.1.103
上記の例では、3台のPCに `ipconfig` コマンドを実行し、その出力がそれぞれのターミナル上に表示されます。
実行結果をログファイルに保存する
出力を記録しておきたい場合は、ログ出力のリダイレクトを追加します。
@echo off
setlocal
set "USER=admin"
set "PASS=yourpassword"
set "COMMAND=ipconfig"
set "LOGFILE=remote_log.txt"
echo ==== 実行開始 %DATE% %TIME% ==== >> %LOGFILE%
for /f %%H in (host_list.txt) do (
echo [%%H] 実行開始 >> %LOGFILE%
psexec \\%%H -u %USER% -p %PASS% cmd /c "%COMMAND%" >> %LOGFILE% 2>&1
echo [%%H] 実行終了 >> %LOGFILE%
)
echo ==== 実行終了 %DATE% %TIME% ==== >> %LOGFILE%
endlocal
これで、すべての実行結果をひとつのログファイルにまとめて記録できます。
実行前に必要な準備
PsExecを使うには、リモートPCで以下の条件が満たされている必要があります。
- リモートPCのファイアウォールで「ファイルとプリンターの共有」が許可されている
- リモートPCに管理者権限で接続できるユーザーアカウントが存在する
- Windowsの設定でリモート管理が許可されている
また、セキュリティの観点から パスワードをバッチ内にハードコーディングすることは推奨されません。運用環境では資格情報を別ファイルや認証ツールに委ねる方法も検討してください。
まとめ
バッチファイルとPsExecを組み合わせることで、複数PCへの一括コマンド実行が可能になります。次のような用途に活用できます。
- 定期的なシステム設定の反映
- 一括ログ取得
- ソフトウェアの遠隔インストールや再起動
中小規模の社内ネットワークであれば、シンプルかつ強力な手段として活用できるため、ぜひ業務に取り入れてみてください。