PowerShell 6 が正式リリースされたので、実運用環境への展開もお考えの方も多いでしょう。
PowerShell の強みは強力なスクリプトでリモート操作ができるところにあるのですが、Windows Server 2016 に PowerShell 6 をインストールし、Windows 10 にインストールした PowerShell 6 からリモート接続しても、PowerShell 6 ではなく PowerShell 5 に接続されてしまいます。
この問題を回避するには、アクセス先(Server 側)でリモート エンドポイントを作る必要があります。
PowerShell 6 に限らず、PowerShell でのリモート操作をする場合は事前設定をする必要があります。
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 側でも PowerShell 5 のプロンプトを管理者として起動して以下の設定をします。
# リモート操作許可 winrm quickconfig -force # 接続先の登録 Set-Item WSMan:\localhost\Client\TrustedHosts * -Force # スクリプト実行許可 Set-ExecutionPolicy RemoteSigned -Force |
リモート エンドポイント作成は、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 に接続することを明示的に指定すために、ConfigurationName オプションにリモート エンドポイント名を指定します。
Enter-PSSession 接続先 -Credential 接続アカウント -ConfigurationName リモートエンドポイント名 |
接続先の PowerShell を指定するので、接続元の PowerShell は 5 であっても問題なく接続できます。
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
Copyright © MURA All rights reserved.