Ошибка установки Unable to resolve package source в PowerShell

Обновлено 09.02.2022

NuGet

Доброго времени суток. Уважаемые читатели блога Pyatilistnik.org. В прошлый раз мы с вами успешно разобрали ошибку whea uncorrectable error в операционной системе Windows 10. Идем далее, и сегодня речь пойдет про ошибки установок модулей PowerShell, а в частности мы поговорим, как правильно установить NuGet, который участвует в установке других модулей расширяющих возможности PowerShell. Уверен, что те кто еще использует операционные системы ниже Windows 10, будет особенно полезно.

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

Потребовалось мне произвести установку дополнительных модулей, которые я обычно использую в своей практике, например VMware.PowerCLI или TerminalSession, но не тут то было, я стал получать при выполнении привычных команд ошибки.

PS C:\scripts> Install-Module Pscx -Scope CurrentUser
ПРЕДУПРЕЖДЕНИЕ: Unable to resolve package source 'https://www.powershellgallery.com/api/v2/'.
PackageManagement\Install-Package : Совпадения для указанных условий поиска и имени пакета "Pscx" не найдены. Чтобы про
смотреть все доступные зарегистрированные источники пакетов, используйте командлет Get-PSRepository.
C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1809 знак:21
+ ... $null = PackageManagement\Install-Package @PSBoundParameters
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], Ex
ception
+ FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage

Install-Package : Совпадения для указанных условий поиска и имени пакета "Pscx" не найдены.

PS C:\Windows\system32> Install-Module -Name VMware.PowerCLI

Для продолжения требуется поставщик NuGet
Для взаимодействия с репозиториями на основе NuGet модулю PowerShellGet требуется версия поставщика NuGet "2.8.5.201"
или более новая. Поставщик NuGet должен быть доступен в "C:\Program Files\PackageManagement\ProviderAssemblies" или
"C:\Users\sem\AppData\Local\PackageManagement\ProviderAssemblies". Поставщик NuGet можно также установить, выполнив
команду "Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force". Вы хотите, чтобы модуль PowerShellGet
установил и импортировал поставщик NuGet прямо сейчас?
[Y] Да - Y [N] Нет - N [S] Приостановить - S [?] Справка (значением по умолчанию является "Y"): Y
ПРЕДУПРЕЖДЕНИЕ: Не удалось скачать в "", используя универсальный код ресурса (URI)
"https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409".
ПРЕДУПРЕЖДЕНИЕ: Не удалось скачать список доступных поставщиков. Проверьте подключение к Интернету.
PackageManagement\Install-PackageProvider : По указанному поисковому запросу поставщика "NuGet" не найдено совпадений.
Для поставщика пакета требуется указать теги "PackageManagement" и "Provider". Проверьте наличие тегов в указанном пакете.
C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:7405 знак:21
+ ... $null = PackageManagement\Install-PackageProvider -Name $script:N ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (Microsoft.Power...PackageProvider:InstallPackageProvider) [Install-Pac
kageProvider], Exception
+ FullyQualifiedErrorId : NoMatchFoundForProvider,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackagePro
vider

PackageManagement\Import-PackageProvider : Для указанных условий поиска и имени поставщика "NuGet" не найдено совпадений. Попытайтесь выполнить команду "Get-PackageProvider -ListAvailable", чтобы увидеть, существует ли провайдер в этой системе.
C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:7411 знак:21
+ ... $null = PackageManagement\Import-PackageProvider -Name $script:Nu ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (NuGet:String) [Import-PackageProvider], Exception
+ FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.ImportPackageProv
ider

Не удалось скачать список доступных поставщиков

Немного изучив данный вопрос, я понял, что тут дело вот в чем. Небольшая цитата от Microsoft "В Microsoft использование новейших и безопасных методов шифрования очень важно для обеспечения безопасности и конфиденциальности наших клиентов. Известно, что TLS 1.0 и TLS 1.1, выпущенные в 1999 и 2006 годах соответственно, уязвимы для ряда атак, включая POODLE и BEAST . В прошлом мы убрали поддержку SSL 3, потому что он также был уязвим для атак. По этим причинам NuGet.org прекратит поддержку TLS 1.0 и 1.1. Это означает, что вы больше не сможете восстанавливать пакеты, загружать пакеты или просматривать NuGet.org, используя эти устаревшие протоколы безопасности. Подавляющее большинство запросов, которые мы получаем с использованием этих протоколов, относятся к нашему устаревшему API V2 (Например https://www.powershellgallery.com/api/v2/), который был заменен нашим API V3 в 2015 году. Чтобы быть готовым к этому переходу, убедитесь, что ваши системы поддерживают TLS 1.2 или выше."

В итоге произошло следующее:

  • Февраль 2020 г - Временно прекращается поддержка TLS 1.0/1.1 в 3 часовых поясах по 4 часа в каждом, чтобы обеспечить совпадение с обычными рабочими часами по всему миру.
  • Апрель 2020 г - окончательное удаление поддержки TLS 1.0/1.1.

Значит пора вашу систему перевести на использование TLS 1.2.

Как проверить, что система использует TLS 1.2

Все операционные системы Windows, начиная с Windows 8, по умолчанию поддерживают TLS 1.2. Если у вас возникли проблемы с подключением (ошибка "Не удалось создать защищенный канал SSL/TLS"), убедитесь, что TLS 1.2 явно не отключен в вашей системе. Для этого откройте командную строку или оболочку PowerShell и выполните команды:

  • reg query "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\ SCHANNEL\Protocols\TLS 1.2\Client" /v Enabled /reg:32
  • reg query "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\ SCHANNEL\Protocols\TLS 1.2\Client" /v Enabled /reg:64

Команды должны либо выдавать ошибку "Не удается найти указанный раздел или параметр в реестре", либо иметь значение 1в системе, в которой включена поддержка TLS 1.2.

Как проверить, что система использует TLS 1.2

Следующие команды должны либо выдавать ошибку "Не удается найти указанный раздел или параметр в реестре", либо иметь значение "0"в системе, в которой включена поддержка TLS 1.2.

Как включить поддержку TLS 1.2

Следующие команды помогут активировать поддержку TLS 1.2:

  • reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\ SCHANNEL\Protocols\TLS 1.2\Client" /v DisabledByDefault /t REG_DWORD /d 0 /f /reg:32
  • reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\ SCHANNEL\Protocols\TLS 1.2\Client" /v DisabledByDefault /t REG_DWORD /d 0 /f /reg:64
  • reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\ SCHANNEL\Protocols\TLS 1.2\Client" /v Enabled /t REG_DWORD /d 1 /f /reg:32
  • reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\ SCHANNEL\Protocols\TLS 1.2\Client" /v Enabled /t REG_DWORD /d 1 /f /reg:64

Если у вас Windows 7, то требует установки обновления (https://www.catalog.update.microsoft.com/search.aspx?q=kb3140245) и следующих обновлений реестра, чтобы включить поддержку TLS 1.2:

обновления включающие TLS 1.2

  • reg add "HKLM\SYSTEM\CurrentControlSet\Control\ SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" /v DisabledByDefault /t REG_DWORD /d 0 /f /reg:32
  • reg add "HKLM\SYSTEM\CurrentControlSet\Control\ SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" /v DisabledByDefault /t REG_DWORD /d 0 /f /reg:64

Кроме того, PowerShell по умолчанию также использует TLS 1.0. Это можно исправить, изменив версию TLS по умолчанию для .NET Framework, которая настроена в разделах реестра:

  • reg add HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:64
  • reg add HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:32

Теперь исправив ключи реестра можно смело активировать поддержку современных версий TLS в PowerShell

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]'Tls11,Tls12'

Как видите теперь запустив команду на установку нужного модуля, все отрабатывает как швейцарские часы и ошибка "Unable to resolve package source" не появляется.

исправление ошибки Unable to resolve package source

Дополнительные ссылки

  • https://devblogs.microsoft.com/nuget/deprecating-tls-1-0-and-1-1-on-nuget-org/
  • https://social.technet.microsoft.com/Forums/ru-RU/3c917354-e540-4b77-a29b-4553a93459b2/powershellget-1080-nuget-109110891090107210851086107410821072?forum=itru

Надеюсь, что теперь вы сможете все обновить, зная что все теперь идет по TLS 1.2. С вами был Иван Сёмин, автор и создатель IT портала Pyatilistnik.org.

One Response to Ошибка установки Unable to resolve package source в PowerShell

  1. Денис:

    Спасибо мне помогло.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *