こんにちは、Windows インフラエンジニア ばにゃです。
本記事では、PowerShellを使用して別コンピューターにリモート接続する方法について解説します。
単純に別コンピューターにリモート接続を行うだけであれば、リモートデスクトップ接続がもっとも簡単でわかりやすい方法です。
- リモートデスクトップ接続
-
リモートデスクトッププロトコルを利用して他のコンピューターに接続を行い、ネットワーク越しに他のコンピューターの操作および画面転送を行う技術
本記事では、リモートデスクトップ接続が許可されていない環境や、なんらかの問題でリモートデスクトップ接続に失敗してしまう環境でも、リモート接続を行なうことが可能な方法について解説します。
結論として、以下のように Enter-PSSession コマンドを実行することでリモート接続が可能となります。
Enter-PSSession -ComputerName <接続先コンピューターのホスト名 or IPアドレス> -Credential <接続に使用するアカウント>
Enter-PSSessionコマンドの詳細や、実行に失敗してしまう場合の対処方法について知りたい方は、以降に記載する内容も確認してください。
前提となる環境
本記事では、以下のような環境を例として記載します。この環境で私自身が実機動作確認済みの手順となります。
- Windows Server 2019
- Windows Server 2016
- Windows 10
※Windows OS 全般
リモート接続方法
Enter-PSSessionコマンドで別コンピューターにリモート接続を行う方法です。
Enter-PSSessionコマンドによるリモート接続
接続元コンピューターよりPowerShellを起動し以下のコマンドを実行します。
Enter-PSSession -ComputerName <接続先コンピューターのホスト名 or IPアドレス> -Credential <接続に使用するアカウント>
-ComputerName で指定する接続先は、IPアドレス/ホスト名/FQDN名、いずれでも問題ありません。
コマンドの実行に成功すると以下のような認証画面が開くので -Credential で指定したユーザーアカウントのパスワードを入力します。
以下のようなメッセージが表示されれば、Enter-PSSessionでのリモート接続が完了です。
[接続先コンピューターのホスト名 or IPアドレス>]: PS C:\Users\<ユーザーアカウント名>\Documents>
リモート接続完了後のPowerShell上で実行するコマンドは、接続先コンピューターで実行されることになります。
リモート接続を終了する場合は以下のコマンドを実行します。
exit
Enter-PSSessionが失敗する場合の対処方法
Enter-PSSessionコマンド実行時にエラーが表示されて失敗する場合、以下の内容を参考に対処を行ってください。
Windows Remote Management (WS-Management) サービスの起動
Enter-PSSession : リモート サーバー xxx.xxx.xxx.xxx への接続に失敗し、次のエラー メッセージが返されました: WinRM は処理を完了できません。 指定したコンピューター名が有効であること、コンピューターにネットワーク経由でアクセスできること、およびWinRM サービスのファイアウォールの例外が有効になっていてこのコンピューターからアクセスできることを確認してください。既定では、パブリック プロファイルの WinRM ファイウォールの例外によって、同一のローカル サブネット内のリモート コンピューターへのアクセスは制限されます。詳細については、about_Remote_Troubleshooting のヘルプ トピックを参照してください。
Enter-PSSessionコマンド実行時に上記のようなメッセージが表示された場合、接続先コンピューターで以下のサービスが起動しているか確認します。
- Windows Remote Management (WS-Management)
サービスが起動していない場合、サービス起動後に再度Enter-PSSessionコマンドを実行します。
TrustedHosts構成設定の確認/追加
Enter-PSSession : リモート サーバー xxx.xxx.xxx.xxx への接続に失敗し、次のエラー メッセージが返されました: WinRM クライアントは要求を処理できません。認証スキームが Kerberos と異なる場合、またはクライアント コンピューターがドメインに参加していない場合は、 HTTPS トランスポートを使用するか、または宛先コンピューターが TrustedHosts 構成設定に追加されている必要があります。 TrustedHosts を構成するには winrm.cmd を使用します。TrustedHosts 一覧に含まれるコンピューターは認証されていない可能性があります。 winrm help config コマンドを実行すると、詳細が表示されます。詳細については、about_Remote_Troubleshooting のヘルプ トピックを参照してください。
Enter-PSSessionコマンド実行時に上記のようなメッセージが表示された場合、接続元コンピューターのTrustedHosts構成設定を確認/追加します。
まず接続元コンピューターで以下のサービスを起動します。
- Windows Remote Management (WS-Management)
PowerShellを起動し以下のコマンドを実行して現在の TrustedHosts構成設定 を確認します。
Get-Item WSMan:\localhost\Client\TrustedHosts
初期状態では以下のように Value に値がない状態が表示されます。
WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Client
Type Name SourceOfValue Value
---- ---- ------------- -----
System.String TrustedHosts
以下のコマンドを実行して、TrustedHosts構成設定 に接続先コンピューターを追加します。
Set-Item WSMan:\localhost\Client\TrustedHosts -Value <接続先コンピューターのホスト名 or IPアドレス>
-Value で指定する接続先は、IPアドレス/ホスト名/FQDN名、いずれでも問題ありません。
以下のような表示がされるため、Y を入力してEnterを押下します。
WinRM セキュリティの構成。
このコマンドは WinRM クライアントの TrustedHosts の一覧を変更します。
TrustedHosts
の一覧内にあるコンピューターは認証されない可能性があります。
クライアントはこれらのコンピューターに資格情報を送信する可
能性があります。この一覧を変更しますか?
[Y] はい(Y) [N] いいえ(N) [S] 中断(S) [?] ヘルプ (既定値は "Y"):
再度以下のコマンドを実行して、TrustedHosts構成設定 を確認します。
Get-Item WSMan:\localhost\Client\TrustedHosts
実行結果で、追加した接続先コンピューターの情報が表示されていれば問題ありません。
WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Client
Type Name SourceOfValue Value
---- ---- ------------- -----
System.String TrustedHosts xxx.xxx.xxx.xxx
上記手順完了後、再度 Enter-PSSession コマンドを実行します。
参考情報
Microsoft ドキュメント
Enter-PSSession コマンドについては、Microsoft の以下サイトも参考にしてください。
- Enter-PSSession
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/enter-pssession?view=powershell-7.1
関連記事
- リモートデスクトップ接続できない場合の確認項目/対処方法
https://cloud-si.com/rds-solution/
関連書籍
PowerShell 6.0 まで対応している PowerShell 関連の書籍です。現状で 6.0 まで対応している数少ない書籍のため、PowerShell の学習におすすめです。
コメント