リモートのWindows上でコマンドで実行する方法(PsExec)

リモートのWindows上でコマンドで実行する方法(PsExec)

複数のWindowsマシンを管理していると、リモートのWindowsマシンに対して任意のコマンドを実行したいときがあります。

そのようなとき、ドメイン環境なら比較的簡単な事前設定だけで、PowerShellコマンドレット「Invoke-Command」を利用して、リモートのWindowsマシンに対してコマンドを実行することができますが、ワークグループ環境では少々面倒な事前設定が必要になります。

そこでここでは、ワークグループ環境でも、少ない事前設定でリモートマシンに対してコマンドを実行させることができるツールとして、Microsoftが提供する「PsExec」を紹介します。

PsExecとは

PsExecは、Microsoftが提供している「Windows Sysinternals」に含まれるツールで、リモートのWindowsマシンでコマンドを実行させることができるコマンドラインツールです。

PsExecツールは、以下のWebページからダウンロードでき、ダウンロードしたZIPファイルは解凍して任意の場所に配置して実行します。

PsExec - Windows Sysinternals | Microsoft Docs

PsExecの使い方

ここでは、ワークグループ環境のWindows 10でのPsExecの使い方を紹介します。

事前設定

Psexecを利用するには、リモートのWindowマシン側で「ファイアウォールの通信許可」と「UACのリモート制限の無効化」設定が必要になります。

ファイアウォールの通信許可

Windowsに標準搭載のファイアウォールを利用している場合は「セキュリティが強化されたWindows Defender ファイアウォール」で「受信の規則」から「リモートサービス管理」の受信を許可します。

リモートのWindows上でコマンドで実行する方法(PsExec)

コマンドで許可するときは、管理者権限でPowrShellを起動して、以下のコマンドを実行します。

PS C:\> Enable-NetFirewallRule -Group "@FirewallAPI.dll,-29502"

UACのリモート制限の無効化

UACのリモート制限を無効化するには、管理者権限でコマンドプロンプトを起動し、以下のコマンドを実行します。

C:\> reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1

なお、コマンドは即時で反映されます。

参考:ユーザー アカウント制御とリモート制限 - Windows Server | Microsoft Docs

PsExecの実行方法

PsExecの実行するときは、コマンドプロンプトやPowerShellを起動して、PsExecを配置した場所にカレントディレクトリを移動します。

リモートのWindows上でコマンドで実行する方法(PsExec)

あとは、以下のようにコマンドを実行します。

PS C:\> psexec \\<リモートマシン名> -i <実行したいコマンド>

リモートマシン名には、コンピューター名やIPアドレスを指定でき、複数のマシンを指定したいときは、カンマ区切りで指定します。

PS C:\> psexec \\<リモートマシン名1>,\\<リモートマシン名2>,\\<リモートマシン名3> -i <実行したいコマンド>

リモートマシンに接続するためのユーザーを指定する必要があるときは、以下のようにユーザー名とパスワードを指定し、ユーザー名にはローカルアカウントやMicrosoftアカウントを指定できます。

PS C:\> psexec -u <ユーザー名> -p <パスワード> \\<リモートマシン名> -i <実行したいコマンド>

使用例1

リモートマシン「PC-002(IPアドレス:192.168.10.217)」に対して「ipconfig」コマンドを実行すると、以下のように結果が表示されます。

リモートのWindows上でコマンドで実行する方法(PsExec)

使用例2

リモートマシン「PC-002(IPアドレス:192.168.10.217)」に対して「cmd」コマンドを実行すると「C:\Windows\system32>」というプロンプトが表示され、リモートマシン上で起動されたコマンドプロンプトの入力待ち状態になり、リモートマシンに対して対話的にコマンドを実行できるようになります。

リモートのWindows上でコマンドで実行する方法(PsExec)

なお、ここで紹介した以外にも、PsExecのオプションを駆使すれば、リモートマシンにプログラムファイルをコピーして実行したり、ローカルシステムアカウントでローカルシステムに接続するといった使い方もできます。

詳しくは、公式ページをご参照ください。

あとがき

リモートマシン上での事前設定が必要という点さえクリアすれば、リモートのWindowsマシンの管理やトラブルシューティングが格段に効率よく行えるようになるでしょう。