Windows: Powershell error instalar nuget: El error
Al instalar un módulo de PowerShell, por ejemplo: Install-AzureAD, al tratarse de un módulo externo, se utilizará la funcionalidad PowerShellGet y nos podemos encontrar con el siguiente error:
Se necesita el proveedor de NuGet para continuar
PowerShellGet necesita la versión del proveedor de NuGet '2.8.5.201' o posterior para interactuar con repositorios
basados en NuGet. El proveedor de NuGet debe estar disponible en 'C:\Program
Files\PackageManagement\ProviderAssemblies' o 'C:\Users\Invitado\AppData\Local\PackageManagement\ProviderAssemblies'.
También puedes instalar el proveedor de NuGet ejecutando 'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.20
-Force'. ¿Quieres que PowerShellGet se instale e importe el proveedor de NuGet ahora?
[S] Sí [N] No [U] Suspender [?] Ayuda (el valor predeterminado es "S"): S
ADVERTENCIA: No se puede descargar desde el URI 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409' a ''.
ADVERTENCIA: No se puede descargar la lista de proveedores disponibles. Comprueba tu conexión a Internet.
PackageManagement\Install-PackageProvider : No se encontró ninguna coincidencia para el criterio de búsqueda
especificado para el proveedor 'NuGet'. El proveedor del paquete requiere las etiquetas 'PackageManagement' y
'Provider'. Comprueba si el paquete especificado tiene las etiquetas.
En C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1: 7294 Carácter: 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 : No se encuentra ninguna coincidencia para el criterio de búsqueda
especificado y el nombre de proveedor 'NuGet'. Pruebe 'Get-PackageProvider -ListAvailable' para ver si el proveedor
existe en el sistema.
En C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1: 7300 Carácter: 21
+ ... $null = PackageManagement\Import-PackageProvider -Name $script:Nu ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (NuGet:String) [Import-PackageProvider], Exception
+ FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.ImportPackageProv
ider
Visto el error desde una ventana de PowerShell:
Windows: Powershell error instalar nuget: ¿Por qué ocurre este error?
Cuando procedemos a instalar un módulo de PowerShell que no tenemos instalado en el equipo y es necesario acceder a un repositorio externo situado en Internet, se utiliza la funcionalidad PowerShellGet.
Podemos encontrar más detalle sobre el funcionamiento de PowerShellGet en el libro:
WS2016LABS - Windows Server 2016 (SYSADMIT.com)
El resumen sería que PowerShellGet requiere el proveedor Nuget y este debe ser instalado.
El error detallado en el apartado anterior parece indicar que es un problema de la conexión a Internet o de la resolución de nombres DNS, sin embargo en este caso no es así.
Las sesiones de PowerShell, cuando realizan conexiones SSL al exterior, utilizan ciertas versiones de protocolos de seguridad, los podemos ver si ejecutamos desde una sesión de PowerShell, lo siguiente:
[Net.ServicePointManager]::SecurityProtocol
Si tras ejecutar la linea anterior aparece:
Ssl3, Tls
Significa que las conexiones SSL desde PowerShell, pueden utilizar estos dos protocolos.
El problema ocurre que estos dos protocolos están obsoletos.
Nuget, rechaza estos protocolos por estar obsoletos.
También están obsoletos protocolos como: TLS1.0 o TLS1.1
Veamos la configuración predeterminada de sesiones de PowerShell en Windows Server:
Windows Server 2019: Tls, Tls11, Tls12
Windows Server 2016: Ssl3, Tls
Windows Server 2012 R2: Ssl3, Tls
Windows: Powershell error instalar nuget: Solución temporal
Para solucionar este problema de forma temporal bastará con ejecutar lo siguiente desde una ventana de PowerShell:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Ejecutando lo siguiente, estamos indicando a la sesión de PowerShell que utilice el protocolo TLS1.2.
De esta forma al instalar NuGet, este no rechazará la conexión SSL por ser obsoleta.
El problema de esta opción es que solo tendrá efecto en la ventana de PowerShell en concreto.
Windows: Powershell error instalar nuget: Solución permanente.
La solución permanente, consistiría en aplicar las siguientes claves en el registro, que lo podemos hacer desde una ventana de PowerShell utilizando el cmd-let: Set-ItemProperty
Para 64 bits:
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Para 32 bits:
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Muchísimas gracias. Me estaba volviendo loco.
ResponderEliminarGenial. Al grano y claro. Me ayudó.
Eliminar