Enter-PSSession cmdlet fails when network path is specified in PSModulePath environment variable

Dieser Artikel enthält eine Lösung für ein Problem, das unerwartet beendet wird, wenn Enter-PSSession in PSModulePath ein Netzwerkpfad angegeben wird.

Ursprüngliche Produktversion:   Windows Server 2016, Windows Server 2012 R2
Ursprüngliche KB-Nummer:   4076842

Problembeschreibung

Wenn in der Umgebungsvariablen PSModulePath ein Netzwerkpfad angegeben ist, schlägt das Cmdlet fehl, und die Enter-PSSession folgende Fehlermeldung wird angezeigt:

Enter-PSSession: Der Befehl "Measure-Object" wurde im Modul "Microsoft.PowerShell.Utility" gefunden, aber das Modul konnte nicht geladen werden. Führen Sie "Import-Module Microsoft.PowerShell.Utility" aus, um weitere Informationen zu erhalten.
At line:1 char:1
+ Enter-PSSession server_name
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Measure-Object:String) [Enter-PSSession], CommandNotFoundException
+ FullyQualifiedErrorId : CouldNotAutoloadMatchingModule

Ursache

Wenn eine PowerShell-Sitzung erstellt und über Kerberos authentifiziert wird, unterstützt die Sitzung keinen doppelten Hop. Die PowerShell-Sitzung kann sich also nicht mithilfe von Netzwerkressourcen authentifizieren.

Wenn PowerShell versucht, die Module im Netzwerkpfad aufgezählt zu werden, schlägt der Vorgang mit dem Fehler "Zugriff verweigert" fehl, und der Befehl wird unerwartet beendet.

Lösung

Um das Problem zu beheben, erstellen Sie die PowerShell-Sitzung, um sich bei CredSSP zu authentifizieren. Sie muss im Voraus konfiguriert werden. Führen Sie auf dem Computer, der das Ziel des Befehls Enter-PSSession ist, den folgenden Befehl aus:

Enable-WSManCredSSP -Role Server

Führen Sie auf dem Computer, auf dem Sie den Befehl Enter-PSSession ausführen, den folgenden Befehl aus:

Enable-WSManCredSSP -Role Client -DelegateComputer Server_name  

Hinweis

Server_name ist der Name des Computers, der das Ziel des Befehls Enter-PSSession ist.

Jedes Mal, wenn dieser Befehl ausgeführt wird, Server_name der Liste hinzugefügt. Die Liste wird im folgenden Registrierungsunterschlüssel gespeichert:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation\AllowFreshCredentials

Führen Sie den Befehl aus, um den Status der CredSSP-Konfiguration Get-WSManCredSSP zu sehen.

Nachdem CredSSP aktiviert wurde, können Sie sich über CredSSP mit dem folgenden Befehl authentifizieren:

Enter-PSSession server_name -Authentication CredSSP -Credential (Get-Credential user_name)

Problemumgehung

Um dieses Problem zu beheben, ordnen Sie die Netzwerkfreigabe einem Laufwerkbuchstaben wie z. B. zu, und legen Sie dann den S: Laufwerkbuchstaben in die PSModulePath . Ein Laufwerkbuchstabe, der auf eine Netzwerkfreigabe verweist, verursacht nicht die unerwartete Beendigung von Enter-PSSession .

Innerhalb der Remote-PowerShell-Sitzung ist der zugeordnete Laufwerkbuchstabe jedoch nicht verfügbar, und die Module in der Netzwerkfreigabe sind weiterhin nicht verfügbar. Nur die lokalen Module sind verfügbar.

Diese Problemumgehung verhindert nur, dass der Benutzer abstürzt, während normale PowerShell-Sitzungen Zugriff auf die Module in der Enter-PSSession Netzwerkfreigabe haben.