(19)
Artikel
bewerten
(74% positiv)
(55)

Ganz einfach erklärt: PowerShell ist die neuere Version der MS-DOS-Eingabeaufforderung, bzw. von Windows-BATch.

Die Windows PowerShell wird immer wichtiger und wird langsam aber sicher in den meisten Bereichen Windows Batch und VBScript ablösen, beschleunigt durch neue cmdlets und der Tatsache, dass das Starten der Skripts bzw. der PowerShell-Umgebung mit keiner Wartezeit mehr verbunden ist. Trotzdem sollte erwähnt werden, dass VBScript bei zeitkritischen Skripts eventuell schneller sein könnte.

Funktion und Begriffe

Grundsätzlich ist die Funktionsweise gleich wie in der Eingabeaufforderung: Befehl eingeben und ENTER drücken. Befehle die in der Eingabeaufforderung funktionieren, können meist auch in der PowerShell aufgerufen werden. In PowerShell spielt es keine Rolle ob die Befehle groß oder klein geschrieben werden. Die Befehle in PowerShell werden Cmdlets genannt. Für einige MS-DOS Befehle existieren Aliases zu den Windows PowerShell cmdlets. D.h. wird beispielsweise der Befehl "dir" aufgerufen, startet PowerShell folgenden Befehl: Get-ChildItem. Aliases können mit dem Befehl Get-Alias aufgerufen werden. siehe auch: PowerShell Befehle Überblick

unser erstes Skript: Starten der PowerShell Entwicklungsumgebung

Die PowerShell-Entwicklungsumgebung ist im Grunde ein für PowerShell optimierter Texteditor. Die Entwicklungsumgebung kann einfach über den Suchdialog von Windows aufgerufen werden:

Der Befehl PowerShell ISE muss für bestimmte Funktionen, wie das Auslesen von Computerinformationen, als Administrator gestartet werden. Die Windows PowerShell ISE ist beim ersten Start in drei Bereiche eingeteilt: 

In der oberen Hälfte befindet sich der Quellcode, die untere Hälfte zeigt die PowerShell-Befehlszeile und im rechten Bereich können PowerShell-Befehle gesucht und eingefügt werden: 

Unser erstes Skript soll einfach nur "hello" ausgeben:

dazu wird folgender PowerShell Befehl verwendet:

Write-Host "hello". Der Befehl wird also in den Skriptbereich geschrieben. Beim Starten des Skripts (grüne Pfeiltaste), wird das Skript in der Befehlszeile gestartet.

Beispielvideo: erstellen eines Powershellskripts

Execution-Policy

Die Execution-Policy schützt den Computer vor dem Ausführen von nicht vertrauenswürdigen Skripts.

Abhängig von der Execution-Policy Einstellung, diese ist je nach Betriebsystemversion unterschiedlich, kann das Skript eventuell nicht ausgeführt werden.

 

Die Einstellung ist in Windows 7 standardmäßig auf "restricted", was das Ausführen von Skripts verhindert, folgender Fehler wird angezeigt:

Die Datei "C:\Users\test2\Desktop\test.ps1" kann nicht geladen werden, da die 
Ausführung von Skripts auf diesem System deaktiviert ist. Weitere
Informationen finden Sie unter "about_Execution_Policies" unter
"http://go.microsoft.com/fwlink/?LinkID=135170".
    + CategoryInfo          : Sicherheitsfehler: (:) [], ParentContainsErrorRe
   cordException
    + FullyQualifiedErrorId : UnauthorizedAccess

"Restricted" lässt Befehle in der PowerShell-Konsole zu, verhindert aber das Ausführen von Skripts.

Die Standardeinstellung beim Doppelklick auf ein PowerShell-Skript (Dateiendung .ps1) startet den Editor.

PowerShell-Skripts erlauben

Die PowerShell-Execution-Policy verhindert das Ausführen von PowerShell-Skripts wenn diese auf "Restricted" gesetzt ist.

Um die Execution-Policy anzuzeigen und später anzupassen, starte ich PowerShell als Administrator:

mittels get-executionpolicy -list kann die aktuelle Einstellung angezeigt werden:

Mit dem Befehl set-executionpolicy kann die Einstellung angepasst werden.

Als Beispiel erlaube ich lokale Skripts oder signierte Skripts aus dem Internet mit der Policy "RemoteSigned".

Der vollständige Befehl lautet dann: Set-ExecutionPolicy remotesigned

Set-ExecutionPolicy unrestricted würde alle PowerShell Skripts erlauben, diese Einstellung sollte aus Sicherheitsgründen nicht verwendet werden, da auch unsichere Skripts aus dem Internet funktionieren würden. Empfohlen ist also "remotesigned". Unbekannte Skripts können im Explorer mit einem Rechtsklick: "Eigenschaften" und "Zulassen" erlaubt werden.

Alternativ können Dateien auch mit dem PowerShell-Befehl Unblock-File erlaubt werden:

mit Unblock-File *\* können auch mehrere Dateien erlaubt werden.

Bypass

Fertige Skripts können später auch ohne Anpassung der ExecutionPolicy gestartet werden, dazu wird die Datei aus der Eingabeaufforderung über die PowerShell.exe mit dem Flag: Bypass aufgerufen:

PowerShell.exe -ExecutionPolicy Bypass -File .unbekannt.ps1 

Anstelle der Datei kann auch ein Befehl übergeben werden:

Powershell -command "Write-Host 'Hallo'"

mehrere Befehle können mit einem Strichpunkt getrennt werden:

Powershell -command "Write-Host 'Hallo'; Write-Host 'du'"

Es wäre sogar folgendes Beispiel möglich: Eine .cmd-Datei lädt ein externe-Skript-Datei und startet eine darin enthaltene Funktion mit bestimmten Parametern.

PowerShell.exe -ExecutionPolicy Bypass -command ". \\share\myFunctions.ps1; one-of-the-functions-in-myFunctions -paramteter1 1 -parameter2 2"

Details zur myFunctions.ps1 siehe:  PowerShell Übergabe von Variablen (Param) 

Ausführen des Skripts

Für das Ausführen des Skripts aus PowerShell, muss der vollständige Pfad angegeben werden. Sollte sich die PowerShellkonsole bereits im Skriptpfad befinden, kann das Skript mit .\ vor dem Dateinamen gestartet werden.

Als Beispiel erzeuge ich folgendes PowerShellskript unter c:\temp\test.ps1

Da es sich auch bei PowerShell um Textdateien handelt, können diese auch im Editor erstellt werden.

 

Der Aufruf über den vollständigen Pfad sieht dann so aus:

Der Aufruf aus dem Pfad c:\temp:

 

letzte Änderung dieses Artikels: 10.10.2016 16:13




Kommentare


andere Themen getagged mit #wie erstelle ich