So führen Sie ein PowerShell-Skript von der Befehlszeile aus und mehr

Wenn Sie neu in der PowerShell-Skriptsprache sind und lernen möchten, wie Sie PowerShell-Skripte ausführen, sind Sie bei diesem Blogbeitrag genau richtig. Dieser Blog wird ein Tutorial sein, das gängige Methoden zum Ausführen von Skripten abdeckt, sowie einige mögliche Probleme.

Voraussetzungen

Dieser Artikel wird Sie durch das Ausführen von PowerShell auf Ihrem lokalen Computer führen. Wenn Sie mitmachen möchten, stellen Sie bitte sicher, dass Sie die folgenden Voraussetzungen erfüllen, bevor Sie diesen Artikel starten.

  • A Windows 10 computer with Administrator privileges.
  • Windows PowerShell Version 5 oder höher. Sie können auch PowerShell v7 verwenden. Dieses Tutorial konzentriert sich auf Windows PowerShell, da es bereits im Betriebssystem Windows enthalten ist.
  • Jeder Textdatei-Editor

Umgang mit der Ausführungsrichtlinie

Wenn Sie zum ersten Mal versuchen, ein Windows PowerShell-Skript auszuführen, könnten Sie auf ein häufiges Problem stoßen. PowerShell wird wahrscheinlich eine Fehlermeldung zurückgeben, die besagt, dass ein Skript „nicht geladen werden kann, da das Ausführen von Skripten auf diesem System deaktiviert ist“.

PS> .\GetServices.ps1
 File C:\Temp\GetServices.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
 .\GetServices.ps1
 ~~~~~ CategoryInfo          : SecurityError: (:) [], PSSecurityException
 FullyQualifiedErrorId : UnauthorizedAccess   

PowerShell gibt die oben genannte Fehlermeldung zurück, wenn Sie versuchen, ein PowerShell mit einer Ausführungsrichtlinie auf Restricted, Remote Signed oder All Signed auszuführen.

Restricted

Restricted ist die Standardrichtlinie für Windows-Clientcomputer. Wenn Sie PowerShell zum ersten Mal verwenden, ist Ihre Standardrichtlinie wahrscheinlich so eingestellt, dass alle Skripte eingeschränkt werden.

Sie können jedoch weiterhin einzelne Befehle in einem Terminal ausführen, jedoch keine Skriptdatei. Die Einschränkung gilt für jede Dateiendung mit .ps1xml, .psm1 oder .ps1.

Unrestricted

Unrestricted ermöglicht das Ausführen eines beliebigen Skripts. Es warnt jedoch vor der Ausführung, wenn das Skript aus dem Internet heruntergeladen wurde. Diese Richtlinie ist normalerweise die Standardrichtlinie für Nicht-Windows-Geräte.

Remote Signed

Die Remote-Signed-Richtlinie ermöglicht das Ausführen eines beliebigen Skripts, das entweder (a) digital signiert ist oder (b) ein beliebiges Skript, das auf Ihrem lokalen Computer mit oder ohne Signatur geschrieben wurde.

Wenn ein Skript aus dem Internet heruntergeladen und nicht signiert wird, müssen Sie die Datei freigeben. Dies kann erfolgen, indem Sie mit der rechten Maustaste auf die Datei klicken und Eigenschaften auswählen. Alternativ können Sie das Unblock-File-PowerShell-Cmdlet für diese bestimmte Skriptdatei verwenden.

Die Verwendung einer Remote-Signed-Richtlinie wäre eine ideale Option, wenn Sie ein Skript aus dem Internet ausführen.

All Signed

Alle signierten erfordert, dass alle Skripts digital von einem vertrauenswürdigen Herausgeber signiert sind. Dazu gehören die Skripts, die aus dem Internet heruntergeladen wurden, und lokal auf Ihrem Computer geschriebene Skripts.

Ändern der PowerShell-Ausführungsrichtlinie

Um die Ausführungsrichtlinie zu ändern:

  1. Öffnen Sie Windows PowerShell mit Ausführen als Administrator, um sicherzustellen, dass Sie die höchsten Berechtigungen haben, um die Richtlinienänderungen vorzunehmen.
Search PowerShell in Start Menu

2. Wenn geöffnet, führen Sie den folgenden PowerShell-Befehl aus, um die Ausführungsrichtlinie Ihres Computers festzulegen. Die Ausführungsrichtlinie kann, wie oben beschrieben, eine von drei verschiedenen Arten sein. Dieses Tutorial verwendet eine nützliche, aber dennoch sichere Ausführungsrichtlinie von RemoteSigned.

Da dieses Tutorial davon ausgeht, dass Sie das Skriptdatei GetServices.ps1 aus dem Internet heruntergeladen haben, setzen Sie die Ausführungsrichtlinie auf RemoteSigned.

PS> Set-ExecutionPolicy RemoteSigned

Die Ausführungsrichtlinie RemoteSigned zwingt Sie dazu, jedes PowerShell-Skript, das aus dem Internet heruntergeladen wurde, kryptografisch zu signieren, bevor PowerShell es auf Ihrem System ausführt.

3. Sie sollten eine Ausgabe sehen, die Sie auffordert, die Aktion zu bestätigen. Geben Sie Y ein und drücken Sie die Eingabetaste, um die Richtlinienänderung zu bestätigen.

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"): 

Zu diesem Zeitpunkt folgen Sie den nächsten Schritten, um verschiedene Methoden zu erkunden, um das PowerShell-Skript auf Ihrem Computer auszuführen.

Wie man PowerShell-Skript ausführt

Um das Ausführen eines PowerShell-Skripts zu demonstrieren, benötigen Sie tatsächlich eine Skriptdatei! Falls Sie keine zur Hand haben, laden Sie diese ZIP-Datei herunter und extrahieren Sie die PS1-Datei daraus. Innen finden Sie eine einfache Skriptdatei namens GetServices.ps1.

Write-Output "Listing Computer Services"
Get-Service

Jedes PowerShell-Skript sollte mit der Dateierweiterung .ps1 enden.

Verwendung der Konsole

Sobald Sie ein Skript bereit haben, gibt es verschiedene Möglichkeiten, wie Sie eine PowerShell-Skriptdatei ausführen können. Eine der häufigsten Methoden ist über die PowerShell-Konsole.

Führen Sie dazu folgende Schritte aus:

  1. Öffnen Sie die PowerShell-Konsole, wie oben gezeigt.

Navigieren Sie mit dem PowerShell-Cmdlet Set-Location oder dem Alias cd zum Speicherort des Skripts auf dem Dateisystem. Das Skript dieses Tutorials befindet sich im Verzeichnis C:\Temp.

PS> cd C:\Temp\

Führen Sie das Skript mit einer Punkt-Notation aus. PowerShell ist eine Shell, die auch nach Befehlsnamen sucht. Um zwischen einem PowerShell-Befehl und einem Skript zu unterscheiden, müssen Sie das Skript mit einem Punkt versehen. Dieser Punkt repräsentiert das aktuelle Verzeichnis.

 PS> .\GetServices.ps1

So führen Sie ein PowerShell-Skript über die Befehlszeile über den PowerShell-Speicherort aus

Wenn Sie Skripts nicht über die PowerShell-Konsole ausführen können oder möchten, können Sie dies auch über die gute alte Befehlszeile (Eingabeaufforderung) tun.

Um Skripte über die Eingabeaufforderung auszuführen, müssen Sie zuerst die PowerShell-Ausführungsdatei (powershell.exe) starten, mit dem PowerShell-Pfad von C:\Program Files\WindowsPowerShell\powershell.exe und dann den Skriptpfad als Parameter übergeben.

Sie können Skripte mit Parametern in jedem Kontext ausführen, indem Sie sie einfach beim Ausführen der PowerShell-Ausführungsdatei angeben, wie z. B. powershell.exe -Parameter 'Foo' -Parameter2 'Bar'.

Sobald Sie cmd.exe öffnen, können Sie ein PowerShell-Skript wie unten gezeigt ausführen. In diesem Beispiel wird der Motor ausgeführt und ihm der Skriptpfad von C:\Temp\GetServices.ps1 übergeben.

Beachten Sie unten, dass das Beispiel unten den PowerShell-Ortspfad verwendet, um das Skript auszuführen. Sie müssen dies tun, wenn der Ordner nicht irgendwo in Ihrem PATH liegt.

CMD> C:\Program Files\WindowsPowerShell\powershell.exe "C:\Temp\GetServices.ps1"

Der PowerShell-Ort für PowerShell 7 verwendet eine andere ausführbare Datei mit dem Namen pwsh.exe, die sich normalerweise in C:\Program Files\PowerShell\7\pwsh.exe befindet.

Hier ist ein nützliches YouTube-Video, das das Ausführen eines Skripts über eine Batch-Datei abdeckt, die von cmd.exe ausgeführt wird.

Verwendung der PowerShell ISE

Wenn Sie eigene Skripte erstellen oder die von anderen bearbeiten, verwenden Sie wahrscheinlich einen Skripteditor wie den PowerShell ISE oder vielleicht Visual Studio (VS) Code. Da die ISE mit Windows geliefert wird, konzentrieren wir uns für dieses Tutorial auf diese Methode.

Um ein Skript über die ISE aufzurufen:

  1. Navigieren Sie zum Startmenü, suchen Sie nach PowerShell ISE und öffnen Sie es.
Search PowerShell ISE in Start Menu

2. Klicken Sie auf DateiÖffnen und suchen Sie Ihr Skript.

Open Script using File Menu

3. Wenn das Skript geöffnet ist, klicken Sie auf die grüne Schaltfläche „Ausführen“, um das Skript auszuführen. Diese Schaltfläche ruft das Skript im integrierten PowerShell-Terminal unten auf.

Run Script using PowerShell ISE

Die Ausgabe des Beispielskripts

A PowerShell script can sometimes return output. This happens when the script you’re executing is built to return objects which is a fundamental component of PowerShell.

Wenn Sie das Beispielskript GetServices.ps1 ausführen, sehen Sie Folgendes. Dieses Skript führt das Get-Service-Cmdlet aus, das alle auf Ihrem lokalen Windows-Computer installierten Dienste zurückgibt.

PS> .\GetScripts.ps1
Listing Computer Services
Status   Name               DisplayName
------   ----               -----------
Running  aakore             Acronis Agent Core Service
Stopped  AarSvc_1b668d      Agent Activation Runtime_1b668d
Running  AcronisActivePr... Acronis Active Protection Service
Running  AcronisCyberPro... Acronis Cyber Protection Service
Running  AcrSch2Svc         Acronis Scheduler2 Service
Running  AdobeARMservice    Adobe Acrobat Update Service
Running  AdobeUpdateService AdobeUpdateService
Running  AGMService         Adobe Genuine Monitor Service
Running  AGSService         Adobe Genuine Software Integrity Se...
----Truncated----

Ausführen eines PowerShell-Skripts von innerhalb eines Skripts heraus

Angenommen, Sie haben zwei Skripte und möchten, dass eines das andere aufruft. Vielleicht haben Sie ein Skript namens GetUser.ps1 und eines namens ResetPassword.ps1. Im GetUser.ps1-Skript möchten Sie das ResetPassword.ps1-Skript ausführen, um ein Benutzerpasswort zurückzusetzen.

Im aufrufenden Skript (GetUser.ps1) fügen Sie eine Zeile hinzu, um das andere Skript auszuführen, genau wie Sie das Skript über die Befehlszeile aufrufen würden.

Sie können unten sehen, dass Sie ein paar Optionen haben. In der Regel sollten Sie wählen, das andere Skript innerhalb derselben Sitzung oder desselben Gültigkeitsbereichs auszuführen, um die Dinge zu vereinfachen, es sei denn, Sie haben einen spezifischen Grund, das Skript in einer anderen PowerShell-Sitzung auszuführen.

Um das andere Skript in einer neuen Sitzung auszuführen
powershell.exe .\ResetPassword.ps1
Um das andere Skript in derselben Sitzung auszuführen
.\ResetPassword.ps1

Source:
https://adamtheautomator.com/run-powershell-script/