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

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

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

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

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

PowerShellでリモートマシン(Windows 10)を操作する方法
ここでは、ワークグループ環境のWindows 10マシンをPowerShellコマンドレットを利用してリモート操作する方法を紹介します。
WindowsマシンにSSH接続してリモートからコマンド操作する方法
ここでは、Windows 10を例に、OpenSSHサーバーを構築/設定(公開鍵認証設定など)する方法を解説します。

この記事は、ローカルのWindowsマシンとリモートのWindowsマシンの双方を、以下の環境で実行した結果を基にしており、他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
Windows 10 Pro 64bit21H2

PsExecとは

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

PsExec - Windows Sysinternals | Microsoft Docs

PsExecは、Windowsシステムやアプリケーションの管理、トラブルシューティングなどで役立つ無償ツールをまとめた「Windows Sysinternals」に含まれているツールで、Microsoftの純正ツールです。

「PsExec」は、インストール不要のツールで、Windows 8.1以前の環境ではリモートのWindowsマシン上でコマンドを実行させることができるツールとして人気があり、Windows 10でも現役で利用できます。

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は、以下の公式ページからダウンロードし、ダウンロードしたZIPファイルは解凍して任意の場所に配置しておきます。

PsExec - Windows Sysinternals | 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マシンの管理やトラブルシューティングが格段に効率よく行えるようになるでしょう。