Home > Windows にまつわる e.t.c.

PowerShell 6 へリモート接続する(Windows 編)


PowerShell 6 が正式リリースされたので、実運用環境への展開もお考えの方も多いでしょう。

PowerShell の強みは強力なスクリプトでリモート操作ができるところにあるのですが、Windows Server 2016 に PowerShell 6 をインストールし、Windows 10 にインストールした PowerShell 6 からリモート接続しても、PowerShell 6 ではなく PowerShell 5 に接続されてしまいます。

 

この問題を回避するには、アクセス先(Server 側)でリモート エンドポイントを作る必要があります。

 

リモート接続準備

PowerShell 6 に限らず、PowerShell でのリモート操作をする場合は事前設定をする必要があります。

 

Server 側

PowerShell 6 では使用できないコマンドレットもあるので、PowerShell 5 のプロンプトを管理者として起動して以下の設定をします。

# リモート操作許可(WS12R2 では Enable-PSRemoting -Force)
Set-WSManQuickConfig -Force

# スクリプト実行許可(default で許可されているが念のため)
Set-ExecutionPolicy RemoteSigned -Force

# WinRM を開く(default で許可されているが念のため)
Set-NetFirewallRule -Name WINRM-HTTP-In-TCP -Enabled True
Set-NetFirewallRule -Name WINRM-HTTP-In-TCP-PUBLIC -Enabled True

 

Client 側

Client 側でも PowerShell 5 のプロンプトを管理者として起動して以下の設定をします。

# リモート操作許可
winrm quickconfig -force

# 接続先の登録
Set-Item WSMan:\localhost\Client\TrustedHosts * -Force

# スクリプト実行許可
Set-ExecutionPolicy RemoteSigned -Force

 

リモート エンドポイント作成

Server 側

リモート エンドポイント作成は、PowerShell 6 本体と一緒にインストールされた Install-PowerShellRemoting.ps1 を使用します。オプションの PowerShellHome には PowerShell 6 のインストールフォルダーを渡します。
(PowerShell 6 インストール後に、Path を通すために logoff/logon するか、再起動してください。)

 

# インストールされた PowerShell 6 本体(pwsh.exe) のフルパス
$PwshFullPath = cmd /c where pwsh.exe

# フルパスからインストールフォルダにする
$PS6Home = Split-Path $PwshFullPath -Parent

# インストールフォルダに移動
cd $PS6Home

# リモート エンド ポイントを登録
.\Install-PowerShellRemoting.ps1 -PowerShellHome $PS6Home

 

リモート エンドポイントを作成すると、リモート エンドポイント名が表示されるので、この値を控えます。

 

もしわからなくなった時は、 Get-PSSessionConfiguration で確認ができます。

 

PowerShell 6 への接続

リモート接続する際に、PowerShell 6 に接続することを明示的に指定すために、ConfigurationName オプションにリモート エンドポイント名を指定します。

Enter-PSSession 接続先 -Credential 接続アカウント -ConfigurationName リモートエンドポイント名

 

接続先の PowerShell を指定するので、接続元の PowerShell は 5 であっても問題なく接続できます。

 

PowerShell 6 のバージョンアップ

PowerShell 6 は、(いまのところ)Windows Update でバージョンが上がることはありません。GitHub で最新版が公開され、最新版をインストールすると古いバージョンが削除される仕組みになっています。

厄介なことに、リモートエンドポイント名 はバージョンアップで自動更新されないので、再登録する必要があります。

さらに、リモートエンドポイント名にはマイナーバージョンも含まれているので、6.0.0 から 6.0.1 にバージョンアップした場合は、"PowerShell.6.0.1" とマイナーバージョンまで指定しなくてはなりません。

将来的には "PowerShell.6" のようにマイナーバージョン番号に依存しなくなると思いますが、現状では新しいバージョンが出たからといって、運用環境で中途半端に展開してしまうとリモート操作が面倒な事になります。

 

参考情報

PowerShell Core の WS-Management (WSMan) リモート処理WS-Management (WSMan) Remoting in PowerShell Core | Microsoft Docs
https://docs.microsoft.com/ja-jp/powershell/scripting/core-powershell/wsman-remoting-in-powershell-core?view=powershell-5.1

PowerShell/PowerShell: PowerShell for every system!
https://github.com/PowerShell/PowerShell

 

関連情報

PowerShell 6 へリモート接続する(クロスプラットフォーム/パスワード認証編)
http://www.vwnet.jp/Windows/PowerShell/2018031701/PsRemoteOverSSH.htm

PowerShell 6 へリモート接続する(クロスプラットフォーム/公開鍵認証編)
http://www.vwnet.jp/Windows/PowerShell/2018032101/PsRemoteOverSSHwKey.htm

ワークグループ環境の Windows Server 2016 への Enter-PSSession がエラーになる問題対応
http://www.vwnet.jp/Windows/WS16/2017062701/EnterPSSession4WGWS16.htm

リモート コンピューターの対話操作(Enter-PSSession)
http://www.vwnet.jp/Windows/PowerShell/EnterPSSession.htm

リモート コンピューターのバッチ操作(Invoke-Command)
http://www.vwnet.jp/Windows/PowerShell/InvokeCommand.htm

リモート コンピューターのパラレル バッチ操作(Invoke-Command -AsJob)
http://www.vwnet.jp/Windows/PowerShell/Invoke-CommandAsJob.htm

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.