NuGet Fehler bei Installation von Powershell Modulen
Kurzinformation: Um gewisse Funktionen wie Microsoft Online, Exchange Online oder Microsoft Teams Administration durchzuführen benötigt man in einer entfernten Powershell sog. Module. Diese werden durch die Konsole von einem NuGet Server heruntergeladen. Was hin und wieder Fehlern führen kann.
NuGet ist vereinfacht erklärt ein Dienst der auf einem IIS-Server einen Ordner über http(s) zur Verfügung stellt. Dadurch kann ich mit einem Befehl auch Packages über eine Konsole beziehen. So funktioniert das auch bei Microsoft Modulen für die Powershell-Konsole selbst.
Wie installiere ich jetzt ein Modul?
(V1) Install-Module -Name MSOnline
(V1) Install-Module -Name PowershellGet
(V1) Install-Module -Name AzureAD
(V2) Install-Module -Name MicrosoftTeams -Force
(V3) Install-Module -Name PowerShellGet -Force -AllowClobberTheoretisch reicht das aus. Die beiden Switche bei V2 und V3 sind nicht verpflichtend -AllowClobber ist aber hilfreich wenn man Module installieren möchte, die Installation aber abbricht da das Modul bereits vorhandene Befehle überschreiben würde. (Befehle werden Clobbed)
Was mache ich jetzt bei dem NuGet Fehler?
Zuerst fragen wir die Powershellversion ab. Hierzu lassen wir uns die Version von Get-Host ausgeben:
Get-Host | Select-Object Version
Grund dafür ist nämlich das ab Powershell Version 5.1 die Protokolle SSL3 und TLS1.0 von Beginn an aktiviert sind. Wenn man jetzt ein we nig forscht merkt man das die beiden Protokolle bereits seit Jahren eingestellt wurden. Wir müssen also auf höhere Standards kommen. Dies geht auf zwei Wegen:
Möglichkeit 1:
Erst kontrollieren wir welche Sicherheitsprotokolle aktiviert sind:
[System.Net.ServicePointManager]::SecurityProtocol
# Hier können unter anderem folgende Angaben zu finden sein:
ssl3, tls, tls11, tls 12, tls13Wir merken und die entsprechende Auswahl und ersetzen Sie mit:
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls11, [System.Net.SecurityProtocolType]::Tls12Nach der Installation kann man die Protokolle wieder zurückstellen. Hierzu einfach nach dem Gleichheitszeichen immer ein [System.Net.SecurityProtocolType]:: gefolgt vom entsprechenden Protokoll einfügen.
So konnte ich die Verbindung zum NuGet-Server aufbauen und die Module problemlos installieren.
Möglichkeit 2:
Es gibt aber noch die Möglichkeit die Protokolle mithilfe der Registry zu ändern. Hierzu muss man die Einträge von .NET 32 und 64 bit anpassen damit auch starke Verschlüsselungen genutzt werden.
#.NET x64
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
#.NET x86
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWordJetzt muss man nur noch die Konsole neu starten damit die Änderungen auch aktiv gehen und man kann sich die Module installieren.