PowerShell 7 und Windows PowerShell. Tobias Weltner
Sie alle Möglichkeiten der PowerShell nutzen und die vielen Beispiele in diesem Buch verwenden können, sind noch einige Einstellungen nötig, die die folgenden Abschnitte zusammenfassen.
Ausführungsrichtlinie festlegen
Bei der ersten Verwendung der PowerShell muss die sogenannte Execution Policy (Ausführungsrichtlinie) so geändert werden, dass Skripte ausgeführt werden dürfen. PowerShell merkt sich die neue Einstellung dauerhaft, sodass der folgende Befehl nur einmal eingegeben werden muss:
PS> Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned -Force
Set-ExecutionPolicy: PowerShell updated your execution policy successfully, but the setting is
overridden by a policy defined at a more specific scope. Due to the override, your shell will
retain its current effective execution policy of Bypass. Type "Get-ExecutionPolicy -List" to view
your execution policy settings. For more information please see "Get-Help Set-ExecutionPolicy".
Falls dabei (wie hier im Beispiel) eine rote Hinweismeldung erscheint, ist das nicht schlimm. Stellen Sie nur sicher, dass die effektive Ausführungsrichtlinie nicht mehr Restricted lautet:
PS> Get-ExecutionPolicy
Bypass
Mehr zur Ausführungsrichtlinie und ihren Einstellungsmöglichkeiten finden Sie auf Seite 44.
Profitipp
Falls sich Ihre PowerShell trotzdem »sonderbar« verhält, können zentrale Sicherheitseinstellungen Ihres Unternehmens dafür verantwortlich sein. Ob PowerShell eingeschränkt wurde, zeigt der folgende Befehl:
PS> $ExecutionContext.SessionState.LanguageMode
FullLanguage
Wenn das Ergebnis nicht FullLanguage lautet, greifen bei Ihnen einschränkende Sicherheitsrichtlinien (siehe auch Seite 46).
Hilfe nachrüsten
Gerade als Einsteiger sind Codebeispiele und erklärende Texte überaus hilfreich, sodass Sie als Nächstes die PowerShell-Hilfe mit Update-Help herunterladen sollten (siehe Seite 42).
Dies muss für Windows PowerShell und PowerShell separat durchgeführt werden. Bei Windows PowerShell sind dazu Administratorrechte erforderlich, bei der modernen PowerShell nicht (wenn Sie den Parameter -Scope CurrentUser verwenden).
Windows PowerShell aktualisieren
Da es die Windows PowerShell bereits seit 2006 gibt, existieren davon viele verschiedene Versionen. Und weil die Windows PowerShell nicht über die üblichen automatischen Windows-Updates aktualisiert wird, sollten Sie kontrollieren, ob Ihre Windows PowerShell überhaupt noch auf aktuellem Stand ist.
Wer eine veraltete PowerShell oder veraltete Komponenten benutzt, riskiert nicht nur Sicherheitsprobleme, sondern es kann dann auch zu den verschiedensten Unverträglichkeiten mit Codebeispielen kommen.
Achtung
Geben Sie die folgenden Befehle unbedingt in einer Windows PowerShell ein (die also über den Befehl powershell gestartet wurde)! Sie wollen ja die klassische PowerShell überprüfen und nicht eine gegebenenfalls parallel installierte moderne PowerShell.
Version prüfen
Prüfen Sie zuerst, welche Version der Windows PowerShell Sie verwenden:
PS> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 1 19041 610
Falls die Version nicht 5.1 lautet, aktualisieren Sie nach Möglichkeit Ihre Windows PowerShell (siehe Seite 21).
Paketmanager PowerShellGet überprüfen
Prüfen Sie als Nächstes die Version der Paketverwaltung PowerShellGet. Mit den Cmdlets aus diesem Modul werden weitere Cmdlets und Module nachgerüstet, dies ist also sehr wichtig.
PS> Get-Module -Name PowerShellGet -ListAvailable
Verzeichnis: C:\Program Files\WindowsPowerShell\Modules
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 1.0.0.1 PowerShellGet {Install-Module, Find-Module, Save-Module...}
Wenn Get-Module (so wie im Beispiel oben) ausschließlich die Version 1.x.x.x meldet, muss PowerShellGet unbedingt aktualisiert werden. Version 1.x.x.x funktioniert inzwischen nur noch sehr eingeschränkt und führt zu Fehlern und Abbrüchen.
Werden dagegen außerdem noch andere Versionen wie 2.2.3 oder höher angezeigt, ist alles in Ordnung.
Zum Glück ist selbst die veraltete Version 1.x.x.x meist immerhin noch in der Lage, neue Module mit Install-Module zu installieren, sodass sich das Modul (und seine Abhängigkeit Packagemanagement) zumindest noch selbst aktualisieren kann:
Install-Module -Name PowerShellGet -Scope CurrentUser -Force -AllowClobber
Install-Module -Name Packagemanagement -Scope CurrentUser -Force -AllowClobber
Listing 1.17: »PowerShellGet« aktualisieren
Tipp
Immer mehr Internetserver sichern ihre https:-Verbindungen mit dem neuen Sicherheitsprotokoll TLS 1.2 ab (Transport Layer Security) und unterstützen ältere TLS-Versionen nicht mehr. Das gilt auch für die Server des PowerShellGet-Paketmanagers, der seit April 2020 nur noch TLS 1.2 akzeptiert.
Bei älteren Windows-Versionen muss TLS 1.2 ausdrücklich aktiviert werden. Ohne diese Aktivierung scheitert die Verbindungsaufnahme zu solchen Internetservern. Genau deshalb kann es also bei älteren Windows-Versionen passieren, dass Install-Module beim Versuch, neue PowerShell-Module nachzurüsten, Verbindungsfehler meldet.
Führen Sie in so einem Fall Listing 1.3 aus, um TLS 1.2 zu aktivieren. Weil diese Einstellung nur für die jeweilige PowerShell-Sitzung gilt, sollten Sie sie, wie auf Seite 65 beschrieben, in das Autostartprofil der PowerShell aufnehmen, damit Sie künftig nicht mehr daran denken müssen.
Falls das Modul PowerShellGet überhaupt gar nicht aufgelistet wird, verwenden Sie vermutlich eine veraltete Windows PowerShell in Version 3 oder 4. Aktualisieren Sie in diesem Fall Windows PowerShell wie oben beschrieben.
Profitipp
Es ist zwar möglich, PowerShellGet (und seine Abhängigkeit Packagemanagement) bei älteren Windows Power-Shell-Versionen nachzurüsten,