Windows環境に標準搭載されているPowerShellのコマンドレットの中には、ローカルマシンを操作するだけでなく、リモートマシンを操作できるコマンドレットがあります。
複数のWindowsマシンを管理している場合、リモートマシンをコマンドラインで操作できれば日々の管理作業を効率化することもできます。
ドメイン環境であれば、比較的簡単にリモートマシンを操作できますが、ワークグループ環境では事前の設定がいくつか必要になります。
そこでここでは、ワークグループ環境のWindows 10マシンをPowerShellコマンドレットを利用してリモート操作する方法を紹介します。
目次
事前設定
リモートマシンをPowerShellで操作するには、事前に以下の設定を行っておく必要があります。
操作されるマシン(リモートマシン)
操作される側のマシンでは、管理者権限でPowerShellを起動して、以下のコマンドレットを順に実行します。
PS> Set-ExecutionPolicy RemoteSigned
PS> Set-WSManQuickConfig
また、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 *
「winrm quickconfig」コマンド実行した時に「このコンピューターのネットワーク接続の種類の 1 つが Public に設定されているため、WinRM ファイ アウォール例外は機能しません。 ネットワーク接続の種類を Domain または Private に変更して、やり直してください。」と表示されることがあります。
この場合、リモートマシンへ接続するときに利用するネットワーク接続の種類が「パブリック」の場合は「プライベート」に変更の上コマンドを再実行します。
以上で、準備完了です。
ここからは、リモートマシンを操作するいくつかのコマンドレットを紹介します。
リモートマシンを対話的に操作する
リモートマシンを対話的に操作したいときは「Enter-PSSession」コマンドレットを利用します。
コマンドレットは、次のように実行します。
PS> Enter-PSSession <リモートマシン> -Credential <接続アカウント>
リモートマシンの指定方法は、IPアドレスでもコンピューター名でもOKです。
コマンドを実行すると、接続アカウントのパスワードを入力するダイアログが表示されるので、パスワードを入力するとリモート接続できます。
たとえば、リモートマシン「PC-002」に「user01」で接続する場合は、次のようにコマンドを実行します。
PS> Enter-PSSession pc-002 -Credential user01
リモートマシンに接続すると、プロンプトが「[接続先]: PS C:\Users\接続アカウント\Documents>」のように変わり、リモートマシン側のプロセスとしてPowerShellコマンドレットを実行できます。
接続を切る時は「Exit-PSSession」あるいは「exit」と入力してエンターキーを押します。
リモートマシンでコマンドを実行する
リモートマシンでコマンドを実行させたいときは「Invoke-Command」コマンドレットを利用します。
コマンドレットは、次のように実行します。
PS> Invoke-Command -ComputerName <リモートマシン> -Credential <接続アカウント> -ScriptBlock {PowerShellコマンドレット}
コマンドを実行すると、接続アカウントのパスワードを入力するダイアログが表示されるので、パスワードを入力して「OK」をクリックすれば、指定したリモートマシンでコマンドを実行することができます。
たとえば、リモートマシン「PC-002」に「user01」で接続して、コマンド「Get-Process | select -First 5」を実行する場合は、次のようにコマンドを実行します。
PS> Invoke-Command -ComputerName pc-002 -Credential user01 -ScriptBlock {Get-Process | select -First 5}
コマンドの実行結果は、以下の画像のようになります。
なお、リモートマシンに対して何回もコマンドを実行する場合は、あらかじめリモートマシンへの固定接続セッションを確立しておくことで、毎回資格情報を入力すのを省けます。
リモートマシンへの固定接続セッションを確立する場合は、次の順にコマンドを実行します。
PS> $session = New-PSSession -ComputerName <リモートマシン> -Credential <接続アカウント>
PS> Invoke-Command $session -ScriptBlock {PowerShellコマンドレット}
あとがき
複数台のWindowsマシンを管理されている方は、リモートデスクトップなどのGUI操作だけでなく、PowerShellでリモートマシンを操作する方法も活用すれば、より効率的な管理ができます。
お試しあれ。