PowerShellでリモートマシン(Windows 10)を操作する方法

PowerShellでリモートマシン(Windows 10)を操作する方法

Windows環境に標準搭載されているPowerShellのコマンドレットの中には、ローカルマシンを操作するだけでなく、リモートマシンを操作できるコマンドレットがあります。

複数のWindowsマシンを管理している場合、リモートマシンをコマンドラインで操作できれば日々の管理作業を効率化することもできます。

ドメイン環境であれば、比較的簡単にリモートマシンを操作できますが、ワークグループ環境では事前の設定がいくつか必要になります。

そこでここでは、ワークグループ環境のWindows 10マシンをPowerShellコマンドレットを利用してリモート操作する方法を紹介します。

WindowsマシンにSSH接続してリモートからコマンド操作する方法
ここでは、Windows 10を例に、OpenSSHサーバーを構築/設定(公開鍵認証設定など)する方法を解説します。
リモートのWindowsマシン上でコマンドで実行する方法(PsExec)
ここでは、ワークグループ環境でも、少ない事前設定でリモートマシンに対してコマンドを実行させることができるツールとして、Microsoftが提供する「PsExec」を紹介します。

この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。

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

事前設定

リモートマシンをPowerShellで操作するには、事前に以下の設定を行っておく必要があります。

操作されるマシン(リモートマシン)

操作される側のマシンでは、管理者権限でPowerShellを起動して、以下のコマンドレットを順に実行します。

PS> Set-ExecutionPolicy RemoteSigned
PS> Set-WSManQuickConfig

PowerShellでリモートマシン(Windows 10)を操作する方法

また、Windows 10に標準搭載の「Windows Defender ファイアウォール」を利用している場合は「RPC動的ポート」での受信を許可しておく必要があります。

受信の規則は、以下のコマンドで追加できます。

PS> New-NetFirewallRule -DisplayName "@RPC-enable" -Program "%SystemRoot%\System32\svchost.exe" -Profile Private -Direction Inbound -Protocol TCP -LocalPort RPC -Action Allow

操作するマシン

操作する側のマシンでは、管理者権限でPowerShellを起動して、以下のコマンドレットを順に実行します。

PS> Set-ExecutionPolicy RemoteSigned
PS> winrm quickconfig
PS> Set-Item WSMan:\localhost\Client\TrustedHosts *

PowerShellでリモートマシン(Windows 10)を操作する方法

Memo

「winrm quickconfig」コマンド実行した時に「このコンピューターのネットワーク接続の種類の 1 つが Public に設定されているため、WinRM ファイ アウォール例外は機能しません。 ネットワーク接続の種類を Domain または Private に変更して、やり直してください。」と表示されることがあります。

この場合、リモートマシンへ接続するときに利用するネットワーク接続の種類が「パブリック」の場合は「プライベート」に変更の上コマンドを再実行します。

以上で、準備完了です。  

ここからは、リモートマシンを操作するいくつかのコマンドレットを紹介します。

リモートマシンを対話的に操作する

リモートマシンを対話的に操作したいときは「Enter-PSSession」コマンドレットを利用します。

コマンドレットは、次のように実行します。

PS> Enter-PSSession <リモートマシン> -Credential <接続アカウント>

リモートマシンの指定方法は、IPアドレスでもコンピューター名でもOKです。

コマンドを実行すると、接続アカウントのパスワードを入力するダイアログが表示されるので、パスワードを入力するとリモート接続できます。

PowerShellでリモートマシン(Windows 10)を操作する方法

たとえば、リモートマシン「PC-002」に「user01」で接続する場合は、次のようにコマンドを実行します。

PS> Enter-PSSession pc-002 -Credential user01

リモートマシンに接続すると、プロンプトが「[接続先]: PS C:\Users\接続アカウント\Documents>」のように変わり、リモートマシン側のプロセスとしてPowerShellコマンドレットを実行できます。

PowerShellでリモートマシン(Windows 10)を操作する方法

接続を切る時は「Exit-PSSession」あるいは「exit」と入力してエンターキーを押します。

PowerShellでリモートマシン(Windows 10)を操作する方法

リモートマシンでコマンドを実行する

リモートマシンでコマンドを実行させたいときは「Invoke-Command」コマンドレットを利用します。

コマンドレットは、次のように実行します。

PS> Invoke-Command -ComputerName <リモートマシン> -Credential <接続アカウント> -ScriptBlock {PowerShellコマンドレット}

コマンドを実行すると、接続アカウントのパスワードを入力するダイアログが表示されるので、パスワードを入力して「OK」をクリックすれば、指定したリモートマシンでコマンドを実行することができます。

PowerShellでリモートマシン(Windows 10)を操作する方法

たとえば、リモートマシン「PC-002」に「user01」で接続して、コマンド「Get-Process | select -First 5」を実行する場合は、次のようにコマンドを実行します。

PS> Invoke-Command -ComputerName pc-002 -Credential user01 -ScriptBlock {Get-Process | select -First 5}

コマンドの実行結果は、以下の画像のようになります。

PowerShellでリモートマシン(Windows 10)を操作する方法

なお、リモートマシンに対して何回もコマンドを実行する場合は、あらかじめリモートマシンへの固定接続セッションを確立しておくことで、毎回資格情報を入力すのを省けます。

リモートマシンへの固定接続セッションを確立する場合は、次の順にコマンドを実行します。

PS> $session = New-PSSession -ComputerName <リモートマシン> -Credential <接続アカウント>
PS> Invoke-Command $session -ScriptBlock {PowerShellコマンドレット}

PowerShellでリモートマシン(Windows 10)を操作する方法

あとがき

複数台のWindowsマシンを管理されている方は、リモートデスクトップなどのGUI操作だけでなく、PowerShellでリモートマシンを操作する方法も活用すれば、より効率的な管理ができます。

お試しあれ。