Kapitel 1 – Erste Schritte mit PowerShell

Dieses Kapitel konzentriert sich auf das Auffinden und Starten von PowerShell und das Lösen der anfänglichen Schmerzpunkte, die neue Benutzer mit PowerShell erleben. Folgen Sie den Beispielen in diesem Kapitel auf Ihrem Computer der Laborumgebung.

Was ist PowerShell?

Windows PowerShell ist eine benutzerfreundliche Befehlszeilenshell und Skriptumgebung zum Automatisieren administrativer Aufgaben von Windows-basierten Systemen. Windows PowerShell ist auf allen modernen Versionen des Windows-Betriebssystems vorinstalliert.

Wo finde ich PowerShell?

Die einfachste Möglichkeit, PowerShell unter Windows 11 zu finden, besteht darin, in die Suchleiste einzugeben PowerShell , wie in Abbildung 1-1 dargestellt. Beachten Sie, dass es vier verschiedene Tastenkombinationen für Windows PowerShell gibt.

Abbildung 1-1 : Suchen nach PowerShell

Windows PowerShell-Tastenkombinationen in einer 64-Bit-Version von Windows:

  • Windows PowerShell
  • Windows PowerShell ISE
  • Windows PowerShell (x86)
  • Windows PowerShell ISE (x86)

Bei einer 64-Bit-Version von Windows verfügen Sie über eine 64-Bit-Version der Windows PowerShell-Konsole und die integrierte Skriptumgebung (Windows PowerShell Integrated Scripting Environment, ISE) und eine 32-Bit-Version der einzelnen Versionen, wie durch das Suffix (x86) auf den Tastenkombinationen angegeben.

Hinweis

Windows 11 wird nur als 64-Bit-Betriebssystem ausgeliefert. Es gibt keine 32-Bit-Version von Windows 11. Windows 11 enthält jedoch 32-Bit-Versionen von Windows PowerShell und windows PowerShell ISE.

Sie haben nur zwei Tastenkombinationen, wenn Sie eine ältere 32-Bit-Version von Windows ausführen. Diese Tastenkombinationen verfügen nicht über das Suffix (x86), sondern sind 32-Bit-Versionen.

Ich empfehle die Verwendung der 64-Bit-Version von Windows PowerShell, wenn Sie ein 64-Bit-Betriebssystem ausführen, es sei denn, Sie haben einen bestimmten Grund für die Verwendung der 32-Bit-Version.

Je nachdem, welche Version von Windows 11 Ausgeführt wird, kann Windows PowerShell in Windows-Terminal geöffnet werden.

Microsoft aktualisiert die PowerShell ISE nicht mehr. Der ISE funktioniert nur mit Windows PowerShell 5.1. Visual Studio Code (VS Code ) mit der PowerShell-Erweiterung funktioniert mit beiden Versionen von PowerShell. VS Code und die PowerShell-Erweiterung werden in Windows nicht ausgeliefert. Installieren Sie VS Code und die Erweiterung auf dem Computer, auf dem Sie PowerShell-Skripts erstellen. Sie müssen sie nicht auf allen Computern installieren, auf denen Sie PowerShell ausführen.

So starten Sie PowerShell

Ich verwende drei verschiedene Active Directory-Benutzerkonten in den von mir unterstützten Produktionsumgebungen. Ich habe diese Konten in der Übungsumgebung gespiegelt, die in diesem Buch verwendet wird. Ich anmeldee mich bei meinem Windows 11-Computer als Domänenbenutzer ohne Domänen- oder lokale Administratorrechte.

Starten Sie die PowerShell-Konsole, indem Sie auf die Windows PowerShell-Verknüpfung klicken, wie in Abbildung 1-1 dargestellt. Beachten Sie, dass in der Titelleiste der Konsole Windows PowerShell angezeigt wird, wie in Abbildung 1-2 dargestellt.

Abbildung 1-2 : Titelleiste des PowerShell-Fensters.

Einige Befehle werden einwandfrei ausgeführt, wenn Sie PowerShell als gewöhnlichen Benutzer ausführen. PowerShell nimmt jedoch nicht an der Benutzerzugriffssteuerung (User Access Control, UAC) teil. Dies bedeutet, dass es nicht zur Erhöhung der Rechte bei Aufgaben auffordern kann, die die Genehmigung eines Administrators erfordern.

Hinweis

UAC ist ein Windows-Sicherheitsfeature, das verhindert, dass bösartiger Code mit erhöhten Rechten ausgeführt wird.

Wenn Sie als gewöhnlicher Benutzer angemeldet sind, gibt PowerShell einen Fehler zurück, wenn Sie einen Befehl ausführen, der eine Erhöhung erfordert. Beispiel: Beenden eines Windows-Diensts:

Stop-Service -Name W32Time
Stop-Service : Service 'Windows Time (W32Time)' cannot be stopped due to
the following error: Cannot open W32Time service on computer '.'.
At line:1 char:1
+ Stop-Service -Name W32Time
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (System.ServiceProcess.ServiceCon
   troller:ServiceController) [Stop-Service], ServiceCommandException
    + FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Comm
   ands.StopServiceCommand

Die Lösung besteht darin, PowerShell mit erhöhten Rechten als Benutzer auszuführen, der ein lokaler Administrator ist. So habe ich mein zweites Domänenbenutzerkonto konfiguriert. Nach dem Prinzip der geringsten Rechte sollte dieses Konto kein Domänenadministrator sein oder über erhöhte Berechtigungen in der Domäne verfügen.

Um PowerShell mit erhöhten Rechten zu starten, klicken Sie mit der rechten Maustaste auf die Windows PowerShell-Verknüpfung , und wählen Sie "Als Administrator ausführen" aus, wie in Abbildung 1-3 dargestellt.

Abbildung 1-3 – Kontextmenü – Als Administrator ausführen.

Windows fordert Sie zur Eingabe von Anmeldeinformationen auf, da Sie sich als gewöhnlicher Benutzer bei Windows angemeldet haben. Geben Sie die Anmeldeinformationen Ihres Domänenbenutzers ein, der ein lokaler Administrator ist, wie in Abbildung 1-4 dargestellt.

Abbildung 1-4 – Benutzerkontensteuerung – Anmeldeinformationen eingeben.

Beachten Sie, dass die Titelleiste der Konsolenfenster mit erhöhten Rechten "Administrator" lautet : Windows PowerShell, wie in Abbildung 1-5 dargestellt.

Abbildung 1-5 : Titelleiste des PowerShell-Fensters mit erhöhten Rechten.

Da Sie nun PowerShell mit erhöhten Rechten als Administrator ausführen, ist UAC kein Problem mehr, wenn Sie einen Befehl ausführen, der eine Erhöhung erfordert.

Wichtig

Sie sollten PowerShell nur bei Bedarf als Administrator ausführen.

Wenn Sie Remotecomputer als Ziel verwenden, müssen Sie PowerShell nicht mit erhöhten Rechten ausführen. Das Ausführen von PowerShell mit erhöhten Rechten wirkt sich nur auf Befehle aus, die auf Ihrem lokalen Computer ausgeführt werden.

Sie können das Suchen und Starten von PowerShell vereinfachen. Heften Sie die PowerShell- oder Windows-Terminal-Verknüpfung an die Taskleiste an. Suchen Sie erneut nach PowerShell, außer diesmal mit der rechten Maustaste darauf, und wählen Sie "An Taskleiste anheften" aus, wie in Abbildung 1-6 dargestellt.

Abbildung 1-6 – Kontextmenü – An Taskleiste anheften

Wichtig

Die originale Version dieses Buchs, die 2017 veröffentlicht wurde, empfohlen, eine Verknüpfung an die Taskleiste anzuheften, um eine Instanz mit erhöhten Rechten automatisch zu starten, wenn Sie PowerShell starten. Aufgrund potenzieller Sicherheitsbedenken empfehle ich dies jedoch nicht mehr. Alle Anwendungen, die Sie über eine Instanz mit erhöhten Rechten von PowerShell starten, umgehen UAC und führen sie mit erhöhten Rechten aus. Wenn Sie beispielsweise einen Webbrowser über eine Instanz mit erhöhten Rechten von PowerShell starten, wird jede Website, die Sie besuchen, mit bösartigem Code auch mit erhöhten Rechten ausgeführt.

Wenn Sie PowerShell mit erhöhten Berechtigungen ausführen müssen, klicken Sie mit der rechten Maustaste auf die PowerShell-Verknüpfung, die an die Taskleiste angeheftet ist, während Sie umschalten. Wählen Sie "Als Administrator ausführen" aus, wie in Abbildung 1-7 dargestellt.

Abbildung 1-7 – Kontextmenü – Als Administrator ausführen.

Ermitteln Der Version von PowerShell

Es gibt automatische Variablen in PowerShell, die Statusinformationen speichern. Eine dieser Variablen ist $PSVersionTable, die Versionsinformationen zu Ihrer PowerShell-Sitzung enthält.

$PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.22621.2428
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.22621.2428
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Wenn Sie eine Version von Windows PowerShell ausführen, die älter als 5.1 ist, sollten Sie Ihre Windows-Version aktualisieren. Windows PowerShell 5.1 ist auf den derzeit unterstützten Versionen von Windows vorinstalliert.

PowerShell Version 7 ist kein Ersatz für Windows PowerShell 5.1; es wird parallel mit Windows PowerShell installiert. Windows PowerShell, Version 5.1 und PowerShell, Version 7, sind zwei verschiedene Produkte. Weitere Informationen zu den Unterschieden zwischen Windows PowerShell, Version 5.1 und PowerShell, Version 7, finden Sie unter Migrieren von Windows PowerShell 5.1 zu PowerShell 7.

Tipp

PowerShell Version 6, früher als PowerShell Core bezeichnet, wird nicht mehr unterstützt.

Ausführungsrichtlinie

Die PowerShell-Ausführungsrichtlinie steuert die Bedingungen, unter denen Sie PowerShell-Skripts ausführen können. Die Ausführungsrichtlinie in PowerShell ist ein Sicherheitsfeature, das dazu dient, die unbeabsichtigte Ausführung bösartiger Skripts zu verhindern. Es ist jedoch keine Sicherheitsgrenze, da sie nicht verhindern kann, dass bestimmte Benutzer absichtlich Skripts ausführen. Ein bestimmter Benutzer kann die Ausführungsrichtlinie in PowerShell umgehen.

Sie können eine Ausführungsrichtlinie für den lokalen Computer, den aktuellen Benutzer oder eine PowerShell-Sitzung festlegen. Sie können auch Ausführungsrichtlinien für Benutzer und Computer mit Gruppenrichtlinien festlegen.

Die folgende Tabelle zeigt die Standardausführungsrichtlinie für aktuelle Windows-Betriebssysteme.

Windows-Betriebssystemversion Standardausführungsrichtlinie
Windows Server 2022 Remote signiert
Windows Server 2019 Remote signiert
Windows Server 2016 Remote signiert
Windows 11 Eingeschränkt
Windows 10 Eingeschränkt

Unabhängig von der Ausführungsrichtlinieneinstellung können Sie jeden beliebigen PowerShell-Befehl interaktiv ausführen. Die Ausführungsrichtlinie gilt nur für Befehle, die in einem Skript ausgeführt werden. Verwenden Sie das Get-ExecutionPolicy Cmdlet, um die aktuelle Ausführungsrichtlinieneinstellung zu bestimmen.

Überprüfen Sie die Einstellung für die Ausführungsrichtlinie auf Ihrem Computer.

Get-ExecutionPolicy
Restricted

Listen Sie die Ausführungsrichtlinieneinstellungen für alle Bereiche auf.

Get-ExecutionPolicy -List
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

Alle Windows-Clientbetriebssysteme verfügen über die Standardeinstellung für die Ausführungsrichtlinie von Restricted. Sie können PowerShell-Skripts nicht mithilfe der Restricted Ausführungsrichtlinieneinstellung ausführen. Um die Ausführungsrichtlinie zu testen, speichern Sie den folgenden Code als .ps1 Datei mit dem Namen Get-TimeService.ps1.

Tipp

Ein PowerShell-Skript ist eine Nur-Text-Datei, die die Befehle enthält, die Sie ausführen möchten. PowerShell-Skriptdateien verwenden die .ps1 Dateierweiterung. Verwenden Sie zum Erstellen eines PowerShell-Skripts einen Code-Editor wie Visual Studio Code (VS Code) oder einen beliebigen Texteditor wie Editor.

Wenn Sie den folgenden Befehl interaktiv ausführen, wird er ohne Fehler abgeschlossen.

Get-Service -Name W32Time

PowerShell gibt jedoch einen Fehler zurück, wenn Sie denselben Befehl aus einem Skript ausführen.

.\Get-TimeService.ps1
.\Get-TimeService.ps1 : File C:\tmp\Get-TimeService.ps1 cannot be loaded
because running scripts is disabled on this system. For more information,
see about_Execution_Policies at
https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Get-TimeService.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

Wenn Sie einen Befehl in PowerShell ausführen, der einen Fehler generiert, lesen Sie die Fehlermeldung, bevor Sie den Befehl wiederholen. Beachten Sie die Fehlermeldung, warum der Befehl fehlgeschlagen ist:

... Ausgeführte Skripts sind auf diesem System deaktiviert.

Um die Ausführung von Skripts zu aktivieren, ändern Sie die Ausführungsrichtlinie mit dem Set-ExecutionPolicy Cmdlet. LocalMachine ist der Standardbereich, wenn Sie den Scope-Parameter nicht angeben. Sie müssen PowerShell als Administrator ausführen, um die Ausführungsrichtlinie für den lokalen Computer zu ändern. Sofern Sie Ihre Skripts nicht signieren, empfiehlt es sich, die RemoteSigned Ausführungsrichtlinie zu verwenden. RemoteSigned verhindert, dass Sie heruntergeladene Skripts ausführen, die nicht von einem vertrauenswürdigen Herausgeber signiert sind.

Bevor Sie die Ausführungsrichtlinie ändern, lesen Sie den about_Execution_Policies Hilfeartikel, um die Sicherheitsauswirkungen zu verstehen.

Ändern Sie die Einstellung für die Ausführungsrichtlinie auf Ihrem Computer in RemoteSigned.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Wenn Sie die Ausführungsrichtlinie erfolgreich geändert haben, zeigt PowerShell die folgende Warnung an:

Execution Policy Change
The execution policy helps protect you from scripts that you do not trust.
Changing the execution policy might expose you to the security risks
described in the about_Execution_Policies help topic at
https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the
execution policy?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "N"):y

Wenn Sie PowerShell nicht als Administrator ausführen, gibt PowerShell die folgende Fehlermeldung zurück:

Set-ExecutionPolicy : Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWAR
E\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied. To
change the execution policy for the default (LocalMachine) scope, start
Windows PowerShell with the "Run as administrator" option. To change the
execution policy for the current user, run "Set-ExecutionPolicy -Scope
CurrentUser".
At line:1 char:1
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy],
   UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.
   PowerShell.Commands.SetExecutionPolicyCommand

Es ist auch möglich, die Ausführungsrichtlinie für den aktuellen Benutzer zu ändern, ohne dass Sie PowerShell als Administrator ausführen müssen. Dieser Schritt ist nicht erforderlich, wenn Sie die Ausführungsrichtlinie für den lokalen Computer erfolgreich auf " RemoteSigned.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Wenn die Ausführungsrichtlinie auf RemoteSigned festgelegt ist, wird das Get-TimeService.ps1 Skript erfolgreich ausgeführt.

.\Get-TimeService.ps1
Status   Name               DisplayName
------   ----               -----------
Running  W32Time            Windows Time

Zusammenfassung

In diesem Kapitel haben Sie erfahren, wo Sie PowerShell finden und wie Sie PowerShell starten. Außerdem haben Sie erfahren, wie Sie die Version von PowerShell und den Zweck der Ausführungsrichtlinien ermitteln.

Überprüfung

  1. Wie bestimmen Sie, welche PowerShell-Version auf einem Computer ausgeführt wird?
  2. Wann sollten Sie PowerShell mit erhöhten Rechten als Administrator starten?
  3. Was ist die Standardausführungsrichtlinie auf Windows-Clientcomputern, und was verhindert sie?
  4. Wie bestimmen Sie die aktuelle PowerShell-Ausführungsrichtlinieneinstellung?
  5. Wie ändern Sie die PowerShell-Ausführungsrichtlinie?

References

Weitere Informationen zu den in diesem Kapitel behandelten Konzepten finden Sie in den folgenden PowerShell-Hilfeartikeln.

Nächste Schritte

Im nächsten Kapitel erfahren Sie mehr über die Auffindbarkeit von Befehlen in PowerShell. Außerdem erfahren Sie, wie Sie die Hilfedateien von PowerShell herunterladen, damit Sie die Hilfe in Ihrer PowerShell-Sitzung anzeigen können.