Ich arbeite auf einem Windows-System mit deutschen Einstellungen, meine Laborsysteme nutzen vielfach englische Einstellungen. Das kann zu Problemen führen, die aber mit einem einzigen Befehl behoben werden können.
Der Hintergrund
Beim Aufbau der Remoting-Session mit New-PSSession werden verschiedene Einstellungen des Quellsystems für die Verbindung übernommen, so auch die Regionaleinstellungen. Der Begriff „Region“ wird vor allem in der Benutzeroberfläche verwendet, technisch wird in den entsprechenden .NET-Klassen der Begriff „Kultur“ (also englisch „Culture“) verwendet.
Die hier relevante Einstellung ist:
[System.Threading.Thread]::CurrentThread.CurrentUICulture
Laut Dokumentation werden damit „kulturabhängige Ressourcen zur Laufzeit“ gesucht. Dabei geht es zum Beispiel um lokalisierte Informationen wie Benutzerausgaben bei PowerShell-Befehlen. Ist nun auf einem System, das nur die englischen Regionaleinstellungen („en-US“) kennt, diese Einstellung auf „deutsch“ („de-DE“) gesetzt, können die entsprechenden Ressourcen nicht gefunden werden.
Mein Fall
In meinem konkreten Fall war das PowerShell-Modul „Microsoft.PowerShell.Archive“ betroffen. Der in einem Skript enthaltene Befehl Expand-Archive brach mit folgender Meldung ab:
The module ‚Microsoft.PowerShell.Archive' could not be loaded
Der Fehler trat nur bei der Nutzung von PowerShell Remoting auf und war auf dem System direkt (also per RDP angemeldet) nicht reproduzierbar.
Beim expliziten Import des Moduls innerhalb der PowerShell-Session war dann die Fehlermeldung aussagekräftiger:
Import-LocalizedData: Cannot find the Windows PowerShell data file ‚ArchiveResources.psd1' in directory ‚C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\de-DE\'
Die Lösung
Ist man erstmal auf der richtigen Spur, dann hilft auch „das Internet“ weiter und so bin ich auf verschiedene Quellen mit weiteren Informationen und Lösungsvorschlägen gestoßen. Die offizielle Dokumentation lieferte zusätzliche Informationen.
In meinem konkreten Fall musste nur direkt nach dem Aufbau der Verbindung die bereits eingangs erwähnte Einstellung auf „en-US“ gesetzt werden:
[System.Threading.Thread]::CurrentThread.CurrentUICulture = 'en-US'
Seminarempfehlung
WINDOWS POWERSHELL FÜR ADMINISTRATOREN [PSHELL-01]
Mehr erfahren