Unable to resolve package source: ошибка установки модулей PowerShell

Unable to resolve package source: ошибка установки модулей PowerShell

При установке модулей PowerShell из онлайн галереи PSGallery вы можете столкнуться с ошибкой
WARNING: Unable to resolve package source
:

Install-Module SqlServer

WARNING: Unable to resolve package source ‘https://www.powershellgallery.com/api/v2’.
PackageManagementFind-Package : No match was found for the specified search criteria and module name ‘sqlserver. Try Get-PSRepository to see all available registered module repositories.
NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.FindPackage

PowerShell Install-Module ошибка Unable to resolve package source

Проблема может появится в Windows 10 и Windows Server 2016 и более старых версиях Windows. Причина проблемы в том, что по-умолчанию PowerShell пытается использовать устаревший и небезопасный протокол TLS 1.0 для подключения к PSGallery. С апреля 2020 года PowerShell Gallery разрешает подключение к NuGet провайдеру только с помощью TLS 1.2.

Если в Windows не отключены протоколы TLS 1.0 и TLS 1.1, нужно выполнить следующую команду, чтобы в текущей сессии PowerShell для подключения использовался протокол TLS 1.2:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Версия TLS 1.2 поддерживается во всех версиях Windows, начиная с Windows 8/Windows Server 2012. Список поддерживаемых версий TLS в PowerShell можно вывести так:

[enum]::GetNames([Net.SecurityProtocolType])

список поддерживаемых версий TLS в PowerShell

В Windows 7 SP1 для включения поддержки TLS 1.2 нужно установить специальное обновление KB3140245 и патч MicrosoftEasyFix51044.msi.

Теперь вы можете установить или обновить модуль из PowerShell Gallery:

включить TLS 1.2 для PowerShell

При следующем открытии консоли PowerShell вам придется заново включить поддержку TLS 1.2. Версии протоколов, используемые в PowerShell для подключения можно вывести так:

[Net.ServicePointManager]::SecurityProtocol

версия протокола TLS в PowerShell по-умолчанию

Чтобы при каждом запуске PowerShell вам не приходилось включать использование TLS1.2, можно изменить версию TLS по умолчанию для .NET Framework. Для этого с помощью PowerShell внесите следующие изменения в реестр:

Set-ItemProperty -Path ‘HKLM:SOFTWAREWow6432NodeMicrosoft.NetFrameworkv4.0.30319’ -Name ‘SchUseStrongCrypto’ -Value ‘1’ -Type DWord
Set-ItemProperty -Path ‘HKLM:SOFTWAREMicrosoft.NetFrameworkv4.0.30319’ -Name ‘SchUseStrongCrypto’ -Value ‘1’ -Type DWord

Аналогичная ошибка при установке моделей PowerShell
Unable to download from URI
описана в предыдущей статье.

Windows 10
Unable to resolve package source: ошибка установки модулей PowerShell