PowerShell Install-Module Error: Unable to Download from URI

В более ранних версиях Windows (Windows 8.1, Windows Server 2012 R2) вы можете увидеть ошибку Невозможно загрузить с URI ошибка при попытке установить модули из галереи PowerShell с помощью NuGet и команды Install-Module.

Например, при установке модуля Exchange Online PowerShell (EXOv3) вы можете увидеть следующие ошибки загрузки PowershellGet и NuGet-провайдера:

Install-Module -Name ExchangeOnlineManagement -Force -Scope AllUsers

ПРЕДУПРЕЖДЕНИЕ: Невозможно загрузить с URI - powershell install moduleПРЕДУПРЕЖДЕНИЕ: Невозможно загрузить с URI - модуль установки powershell

ПРЕДУПРЕЖДЕНИЕ: Невозможно загрузить с URI — модуль установки powershell

WARNING: Unable to download from URI 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409' to ''.
WARNING: Unable to download the list of available providers. Check your internet connection.
PackageManagement\Install-PackageProvider : No match was found for the specified search criteria for the provider 'NuGet'. The package provider requires 'PackageManagement' and 'Provider' tags. Please check if the specified package has the tags.
CategoryInfo : InvalidArgument: (Microsoft.Power...PackageProvider:InstallPackageProvider) [Install-PackageProvider], Exception + FullyQualifiedErrorId : NoMatchFoundForProvider,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackageProvider
Unable to find package provider 'NuGet'. It may not be imported yet. Try 'Get-PackageProvider -ListAvailable'.
+ CategoryInfo : ObjectNotFound: (Microsoft.Power...PackageProvider:GetPackageProvider) [Get-PackageProvider], Exception
+ FullyQualifiedErrorId : UnknownProviderFromActivatedList,Microsoft.PowerShell.PackageManagement.Cmdlets.GetPackageProvider
+ CategoryInfo : InvalidOperation: (:) [Install-Module], InvalidOperationException
+ FullyQualifiedErrorId : CouldNotInstallNuGetProvider,Install-Module
Такая же ошибка появится при установке любого модуля PowerShell через NuGet, будь то AzureAD, VMware PowerCLI, PSWindowsUpdate, SecretManagement, SQLServer и т. д.

В этом случае вы увидите Schannel ошибка с идентификатором события 36874 в средстве просмотра событий -> Системный журнал.

A TLS 1.2 connection request was received from a remote client application, but none of the cipher suites supported by the client application are supported by the server. The TLS request has failed.

Проблема возникает, когда PowerShell пытается подключиться к репозиторию NuGet, используя устаревшие протоколы TLS/SSL вместо текущего TLS 1.2.

Проверьте версию PowerShell, установленную на вашем компьютере:

host|select version

Если версия PowerShell — 5.1.14xx или более ранняя, обновите ее.

По умолчанию более ранние версии PowerShell используют SSL 3.0 и TLS 1.0 для создания безопасных HTTPS-соединений с репозиториями.

Чтобы отобразить список протоколов, используемых для подключения, выполните следующую команду:

[Net.ServicePointManager]::SecurityProtocol]

Ssl3, Tls

powershell проверка наличия включенных протоколов безопасностиpowershell проверка включения протоколов безопасности

В нашем примере PowerShell использует устаревшие протоколы SSL 3.0, TLS 1.0 или TLS 1.1. Репозиторий Microsoft требует от клиентов TLS 1.2 или TLS 1.3.

Чтобы подключиться по протоколу TLS 1.2, необходимо выполнить следующую команду:

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

включить tls 1.2 в powershellвключить tls 1.2 в powershell

Затем вы можете установить модуль PowerShell с помощью Install-Module.

Чтобы не менять каждый раз версию протокола соединения HTTPS вручную, в .NET Framework 4.5 (и более новых версиях) можно установить TLS 1.2 в качестве протокола соединения по умолчанию. Для этого необходимо внести следующие изменения в реестр с помощью команд:

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord

Перезапустите консоль PowerShell. Отобразите список доступных протоколов:

[Net.ServicePointManager]::SecurityProtocol

Tls, Tls11, Tls12

Теперь для подключения PowerShell всегда будет использоваться TLS 1.2, и вы сможете установить любой модуль с помощью NuGet.

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

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