\r\n\r\n
PowerShellリモート処理では、リモートのWindowsシステム上でPowerShellコマンドを実行したり、完全なPowerShellセッションにアクセスしたりすることができます。SSHと似ていて、他のOSのリモート端末にアクセスするために使用されます。
PowerShellはデフォルトでロックされているため、PowerShellリモート処理を有効にしてから使用する必要があります。ドメインではなくワークグループを使用している場合(ホームネットワークなど)、この設定手順は若干複雑になりますが、順を追って説明します。
関連:PowerShellとWindowsコマンドプロンプトの違いについて
まず、リモート接続を行いたいPCでPowerShell Remote Processingを有効にします。このPCでは、管理者権限でPowerShellを開く必要があります。
Windows 10の場合、Windows+Xを押して、スーパーユーザーメニューからPowerShell(Admin)を選択します。
Windows 7またはWindows 8の場合、スタートボタンを押し、「powershell」と入力します。結果を右クリックし、"管理者として実行 "を選択します。
PowerShellウィンドウで、次のコマンドレット(コマンドのPowerShell名)を入力し、Enterキーを押します。
Enable-PSRemoting -Forceこのコマンドは、WinRMサービスを開始し、システム上で自動的に開始するように設定し、着信接続を許可するファイアウォール規則を作成します。コマンドレットの-Forceセクションは、PowerShellに各ステップの実行を促さずにこれらのアクションを実行するように指示します。
お使いのパソコンがドメインに属している場合は、これだけで設定が完了します。接続のテストにスキップすることができます。あなたのコンピュータがワークグループに属している場合、それらは家庭や中小企業のネットワーク上にある可能性があり、あなたはより多くのインストール作業を行う必要があります。
注:ドメイン環境でのリモート処理の設定の成功は、ネットワーク設定に完全に依存します。管理者が設定したグループポリシーは、自動的にリモート処理を無効にしたり、あるいは有効にしたりすることができます。また、PowerShellを管理者として実行するために必要な権限を持っていない可能性もあります。このような操作を行う場合は、必ず事前に管理者にお問い合わせください。また、そのようなことを許可しない正当な理由がある場合もありますし、快く設定してくれる場合もあります。
PCがドメイン上にない場合は、さらに設定する手順が必要です。前項で説明したように、接続したいPCではすでにリモート処理が有効になっているはずです。
関連記事:Windowsのプライベートネットワークとパブリックネットワークの違いとは?
注:ワークグループ環境でPowerShellリモート処理を動作させるには、ネットワークがパブリックネットワークではなく、プライベートネットワークとして構成されている必要があります。すでにパブリックネットワークを設定している場合は、プライベートネットワークとパブリックネットワークの違いや、プライベートネットワークへの変更方法について、「プライベートネットワークとパブリックネットワーク」のガイドをご覧ください。
次に、接続するPCと接続されるPC(複数可)のTrustedHostsの設定を行い、互いのコンピュータが信頼できるようにする必要があります。これには、2つの方法があります。
ホームネットワーク上にいて、どのPCでもリモート接続を継続・信頼したい場合は、PowerShellに以下のコマンドレットを入力します(この場合も、管理者として実行する必要があります)。
Set-Item w**an:\localhost\client\trustedhosts *アスタリスクは、すべてのコンピュータを表すワイルドカードです。接続できるコンピュータを制限したい場合は、アスタリスクをIPアドレスまたはコンピュータ名のカンマ区切りリストで置き換えることができます。
このコマンドを実行した後、新しい設定を有効にするために、WinRMサービスを再起動する必要があります。以下のコマンドレットを入力し、Enterキーを押します。
Restart-Service WinRM接続したいPCと、接続したいPCで両方のコマンドレットを実行する必要があることを忘れないでください。
PowerShellによるリモート処理のためのPCのセットアップが完了したので、いよいよ接続テストです。リモートシステムにアクセスするPCで、PowerShellに次のコマンドレットを入力し(「COMPUTER」をリモートPCの名前またはIPアドレスに置き換える)、Enterキーを押します。
Test-WsMan COMPUTERこの簡単なコマンドは、WinRMサービスがリモートPC上で実行されているかどうかをテストします。正常に完了すると、リモートPCのWinRMサービスに関するメッセージがウィンドウに表示され、WinRMが有効になり、PCが通信できるようになったことが示されます。コマンドに失敗した場合は、エラーメッセージが表示されます。
リモート システムでコマンドを実行するには、次の構文で Invoke command コマンドレットを使用します。
Invoke-Command -ComputerName COMPUTER -ScriptBlock { COMMAND } -credential USERNAME"COMPUTER "は、リモートPCの名前またはIPアドレスです。"COMMAND "には実行したいコマンドを指定します。"USERNAME "は、リモートPCでコマンドを実行するためのユーザー名です。ユーザー名のパスワードを入力する画面が表示されます。
以下はその一例です。IPアドレスが10.0.0.22のリモートコンピュータのC:³³ディレクトリの内容を表示したいのですが、どうすればいいですか?ユーザー名「wjgle」を使用したいので、以下のコマンドを使用します。
Invoke-Command -ComputerName 10.0.0.22 -ScriptBlock { Get-ChildItem C:\ } -credential wjgleリモートPCで複数のコマンドレットを実行する場合、Invoke CommandコマンドレットとリモートIPアドレスを繰り返し入力する代わりに、リモートセッションを開始することができます。以下のコマンドレットを入力し、Enterキーを押すだけです。
Enter-PSSession -ComputerName COMPUTER -Credential USER同様に、「COMPUTER」をリモートPCの名前またはIPアドレスに、「USER」を呼び出すユーザーアカウントの名前に置き換えてください。
プロンプトが接続中のリモートコンピュータを示すように変わり、リモートシステム上で任意の数のPowerShellコマンドレットを直接実行できるようになります。