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’._x000D_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._x000D_NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.FindPackage

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

Аналогичная ошибка будет появляться при онлайн установке любого PowerShell модуля через Nuget будь то модуль Exchange Online Powershell , AzureAD , VMware PowerCLI , PSWindowsUpdate , SecretManagement , SQLServer и т.д. При этом любой PowerShell модуль можно легко установить вручную в офлайн режиме .

Проблема может появится в 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.

Если ваша Windows 7 не поддерживает TLS 1.2, то при подключении к большинству современных почтовых серверов с помощью Outlook будет появляться ошибка 0x800CCC1A – Ваш сервер не поддерживает указанный вами тип шифрования .

Теперь вы можете установить или обновить модуль из 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 настроено подключение через прокси :

netsh winhttp show proxy

Можно импортировать настройки прокси-сервера из системных настроек Windows (Internet Explorer).

netsh winhttp import proxy source=ie

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

EnglishRussianUkrainian