調べていたら PowerShell Gallery が 4月から TLS 1.0 / TLS 1.1での接続が不可となり TLS 1.2 が必須となっていたことが原因だったようです。
詳細は以下の Microsoft の公式アナウンスを参照ください。
PowerShell Gallery TLS Support
https://devblogs.microsoft.com/powershell/powershell-gallery-tls-support/
ワークアラウンドとして適用した PowerShellGet 2.2.4.x から TLS 1.2 が強制されるようになっていたのでエラーが回避できた様です。
PowerShell で TLS 1.2 を強制することでの回避方法
先日の環境の PowerShellGet と PackageManagement をそれぞれ初期バージョンの 1.0.0.1 に戻して、TLS 1.2 を強制することで問題が回避できるか確認しました。※ 公式手順が MS Blog にありましたのでリンクを追記します (2022/11/03)
# 最初に PowershellGet などのバージョンを確認
PS C:\> Get-Module PackageManagement,PowershellGet -list | Select-Object Name,Version,Path
Name Version Path
---- ------- ----
PackageManagement 1.0.0.1 C:\Program Files\WindowsPowerShell\Modules\PackageManagement\1.0.0.1\PackageManagement.psd1
PowerShellGet 1.0.0.1 C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PowerShellGet.psd1
# この状態で PowerShell Gallery から PowerCLI を見つけることができるか確認
PS C:\> Find-Module -Name VMware.PowerCLI
警告: Unable to resolve package source 'https://www.powershellgallery.com/api/v2'.
PackageManagement\Find-Package : 指定された検索条件とパッケージ名 'VMware.PowerCLI' と一致するものが見つかりませんでした。
登録されている使用発生場所 C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1360 文字:3
+ PackageManagement\Find-Package @PSBoundParameters | Microsoft ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Microsoft.Power...ets.FindPackage:FindPackage) [Find-Package], Exception
+ FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.FindPackage
# エラーになったのでプロトコルを確認
PS C:\> [Net.ServicePointManager]::SecurityProtocol
Ssl3, Tls
# Microsoft の公式ブログにもある手順で TLS 1.2 を設定
PS C:\> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# TLS 1.2 が指定されたことを確認
PS C:\> [Net.ServicePointManager]::SecurityProtocol
Tls12
# もう一度 Find-Module で PowerCLI が見つかるか確認
PS C:\> Find-Module -Name VMware.PowerCLI
Version Name Repository Description
------- ---- ---------- -----------
12.0.0.... VMware.PowerCLI PSGallery This Windows PowerShell module contains VMware.PowerCLI
手順としては非常にシンプルで、
[Net.ServicePointManager]::SecurityProtocol
で現在のプロトロルバージョンを確認し、古いバージョンの指定のままならば
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
で TLS 1.2 の利用を強制設定すれば今まで通りデフォルトバージョンの PowerShellGet でも PowerCLI のインストール、メンテナンスができました。
セキュリティの観点からも既定値はあらかじめ変えておいたほうが良いかもしれませんね。
また、PowerShellGet 2.2.4.x から TLS 1.2 が強制されるようになっているので、TLS 1.2 を指定したついでにプリインストールされている PowerShellGet も更新してしまうと良いです。
プリインストールされている PowershellGet のアップデート方法
# 現在(プリインストール)の PowerShellGet,PackageManagement のバージョンを確認
PS C:\> Get-Module PowerShellGet,PackageManagement -ListAvailable
ディレクトリ: C:\Program Files\WindowsPowerShell\Modules
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Binary 1.0.0.1 PackageManagement {Find-Package, Get-Package, Get-PackageProvider, Get-Packa...
Script 1.0.0.1 PowerShellGet {Install-Module, Find-Module, Save-Module, Update-Module...}
# PowerShellGet を更新 (プリインストールのものは Update-Module ではなく Install-Module に -AllowClobber オプションを使う)
PS C:\> Install-Module PowerShellGet -AllowClobber -Force
# インストールされたバージョンを確認
# Update-Module ではないので更新さらたバージョンと旧バージョンが両方確認出来る
PS C:\> Get-Module PowerShellGet,PackageManagement -ListAvailable
ディレクトリ: C:\\Documents\WindowsPowerShell\Modules
ModuleType Version Name ExportedCommand
---------- ------- ---- ----------------
Script 1.4.8.1 PackageManagement {Find-Package, Get-Package, Get-PackageProvider, Get-Packa...
Script 2.2.5 PowerShellGet {Find-Command, Find-DSCResource, Find-Module, Find-RoleCap...
ディレクトリ: C:\Program Files\WindowsPowerShell\Modules
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Binary 1.0.0.1 PackageManagement {Find-Package, Get-Package, Get-PackageProvider, Get-Packa...
Script 1.0.0.1 PowerShellGet {Install-Module, Find-Module, Save-Module, Update-Module...}
PowerShellGet が更新できればその後は PowerShell Gallery などへの接続は TLS 1.2 を利用するようになります。
ご参考まで
お陰で問題を回避できました。ありがとうございます。
返信削除