Buscar

Windows: Powershell error instalar nuget

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

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 


2 comentarios:

  1. Muchísimas gracias. Me estaba volviendo loco.

    ResponderEliminar