Hoe los ik de PowerShell Install-Module-fout op: Kan niet downloaden vanaf URI?

Als je modules probeert te installeren vanuit de PowerShell Gallery met oudere Windows-systemen (zoals Windows 8.1 of Server 2012 R2), is de kans groot dat je de irritante foutmelding ‘Kan niet downloaden van URI’ bent tegengekomen. Dit komt vrij vaak voor, omdat oudere PowerShell-versies standaard verouderde protocollen gebruiken – SSL 3.0 of TLS 1.0 – die Microsoft niet langer ondersteunt voor deze repositories. Je ziet dan ook foutmeldingen over NuGet dat niet gevonden wordt, en mogelijk zelfs een TLS-fout in Logboeken (gebeurtenis-ID 36874), die wijst op problemen met de coderingssuite. Kortom, PowerShell probeert verbinding te maken met behulp van verouderde protocollen en de server weigert – geen wonder dat het niet soepel verloopt.

Om dit probleem op te lossen, moet je PowerShell dwingen om TLS 1.2 te gebruiken, de huidige standaard. Hier lees je hoe je dat op een vrij eenvoudige manier kunt doen. Als je PowerShell-versie vrij oud is (<= 5.1.14xx), werk deze dan eerst bij, want oudere versies werken mogelijk niet goed met deze stappen. Maar als je er nog steeds niet uitkomt, volg dan deze stappen. Als je ze correct uitvoert, zorgt dit er in ieder geval voor dat PowerShell TLS 1.2 gebruikt en je modules kunt installeren zonder de gebruikelijke problemen.

Hoe los je de foutmelding “Kan niet downloaden van URI” op door TLS 1.2 af te dwingen?

Controleer uw PowerShell-versie.

  • Open PowerShell en voer het volgende commando uit:host | select-object Version
  • Als de versie ouder is dan 5.1.14xx, overweeg dan om PowerShell bij te werken; een nieuwere versie is absoluut beter voor dit probleem.

Het is handig om te weten welke versie je gebruikt, omdat oudere PowerShell-versies standaard SSL 3.0 of TLS 1.0 gebruiken, wat verouderd is en door Microsoft wordt geblokkeerd.

Controleer welke protocollen PowerShell gebruikt.

  • Loop:[Net. ServicePointManager]::SecurityProtocol
  • Hier worden protocollen zoals weergegeven Ssl3, Tls. Als je TLS of TLS11 ziet, is dat een probleem.

In sommige configuraties zie je mogelijk nog TLS 1.0 of zelfs SSL3, wat niet meer wordt ondersteund. Geen wonder dat verbindingen mislukken.

Stel PowerShell in op het gebruik van TLS 1.2.

  • Voer dit commando uit:[Net. ServicePointManager]::SecurityProtocol = [Net. SecurityProtocolType]::Tls12
  • Dit dwingt PowerShell om TLS 1.2 te gebruiken voor alle volgende HTTPS-verzoeken. Werkt perfect in de meeste configuraties.
  • Tip: Soms moet je dit elke keer uitvoeren als je een nieuwe sessie opent, tenzij je het in je profielscript hebt opgenomen.

Stel TLS 1.2 in als standaard in. NET Framework (optioneel, maar aanbevolen).

  • Deze stap zorgt ervoor dat PowerShell standaard TLS 1.2 gebruikt voor alle. NET-apps, inclusief PowerShell zelf. Het is een aanpassing in het register.
  • Voer deze opdrachten uit in PowerShell (als beheerder):
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
  • Deze wijzigingen in het register schakelen sterke cryptografie, waaronder TLS 1.2, in voor zowel 64-bits als 32-bits. NET Framework-installaties.
  • PowerShell opnieuw opstarten

    • Sluit PowerShell en open het opnieuw om de wijzigingen toe te passen. Controleer vervolgens de protocollen nogmaals:[Net. ServicePointManager]::SecurityProtocol
    • Je zou moeten zien Tls, Tls11, Tls12dat TLS 1.2 is ingeschakeld en klaar voor gebruik.

    Probeer nu je modules opnieuw te installeren, bijvoorbeeld met Install-Module -Name ExchangeOnlineManagement -Force -Scope AllUsers. Als alles correct is ingesteld, zouden de fouten moeten verdwijnen en zouden de modules probleemloos gedownload moeten worden.

    Eerlijk gezegd is dit een beetje vreemd, want Windows maakt het onnodig ingewikkeld om verouderde protocollen uit te schakelen. Op sommige machines is hiervoor een herstart of een herstart van PowerShell nodig, maar eenmaal ingesteld blijft het meestal wel werken. Het belangrijkste is dat PowerShell stopt met het gebruik van de ouderwetse protocollen en overstapt op TLS 1.2, dat veilig en ondersteund is – simpel toch?

    Samenvatting

    • Controleer uw PowerShell-versie en werk deze indien nodig bij.
    • Gebruik dit [Net. ServicePointManager]::SecurityProtocolom te zien wat actief is.
    • Dwing PowerShell om TLS 1.2 te gebruiken met[Net. ServicePointManager]::SecurityProtocol = [Net. SecurityProtocolType]::Tls12
    • Stel sterke cryptografie in het register in om toekomstige problemen te voorkomen.
    • Start PowerShell opnieuw op en probeer de module opnieuw te installeren.

    Samenvatting

    Dat hele TLS-gedoe is lastig, vooral met oudere Windows-versies. Maar als de protocollen eenmaal goed geconfigureerd zijn, zou het installeren van modules uit de PowerShell Gallery een fluitje van een cent moeten zijn. Het is wel irritant dat Microsoft deze oudere standaardinstellingen meelevert, maar goed, je hebt in ieder geval geleerd hoe je er zonder al te veel frustratie mee om moet gaan. Hopelijk bespaart dit iemand urenlange frustratie.