Windows PowerShell Skript erstellen und ausfĂŒhren

Im einfachsten Fall ist ein PowerShell-Skript eine Textdatei mit einer Reihe von PowerShell-Befehlen. Als PowerShell Skript versteht man eine Datei mit der Endung .ps1. Die Skriptdatei kann eine Sammlung von Befehlen, Funktionen oder Cmdlets enthalten.

Mit PowerShell kann nahezu alles automatisiert werden, angefangen von einfachen AblĂ€ufen bis hin zu komplexen ProgrammablĂ€ufen. Neben der klassischen PowerShell Konsole gibt es fĂŒr das Skripting noch die PowerShell-Entwicklungsumgebung (PowerShell ISE), diese ist im Grunde ein fĂŒr PowerShell optimierter Texteditor mit integrierter Konsole. Die Entwicklungsumgebung kann einfach ĂŒber den Suchdialog von Windows aufgerufen werden:

Starten der PowerShell Entwicklungsumgebung (ISE)

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

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 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: (:) [], ParentContainsErrorRecordException    
+ 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 sind.

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.

Zone-Identifier

Der Unterschied zwischen einem lokal erstellten und einem vom Internet kopierten Skript ist der Zone-Identifier.

Damit das Internet-Skript ausgefĂŒhrt werden kann, muss dies vorab zugelassen werden:

wie-erstelle-ich-ein-PowerShell-Skript-22.jpg?cache=2017-09-1217-42-04457500

Wird ein PowerShell-Skript vom Internet kopiert, bekommt die Datei folgenden Zone-Identifier:

Add-Content -Path 'Script.ps1' -Value "[ZoneTransfer]`nZoneId=3" -Stream 'Zone.Identifier'

Der Klick auf "Zulassen" löschten den Zone Zone-Identifier, analog des folgenden Befehles

Clear-Content -Path 'Script.ps1' -Stream 'Zone.Identifier'

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 eine 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 PowerShell-Skript unter c:\temp\test.ps1

Inhalt des Textfiles:

Write-Host "hello"

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:

Preview wie erstelle ich einen eigenen PowerShell Befehl: Cmdlet

wie erstelle ich einen eigenen PowerShell Befehl: Cmdlet

geÀndert: 15.04.2020 von Bernhard (Erstveröffentlichung: 08.08.2013 )

Befehle in Powershell nennen sich Cmdlets und sind Funktionen an die bestimmte Variablen ĂŒbergeben werden können. Die Funktion fĂŒhrt dann bestimmte Aufgaben aus und ĂŒbergibt das Ergebnis mittels "return" an die Konsole. ... weiterlesen

Preview PowerShell Cmdlet Hilfe

PowerShell Cmdlet Hilfe

erstellt: 12.09.2017 von Bernhard

Die Hilfe in einem selbst erstellten Cmdlet ist ein einfacher Kommentarblock am Beginn einer Funktion, bzw. am Anfang einer PowerShell Skript-Datei. ... weiterlesen

Preview PowerShell: Cmdlet (erweiterte Funktion)

PowerShell: Cmdlet (erweiterte Funktion)

geÀndert: 02.05.2022 von Bernhard (Erstveröffentlichung: 05.02.2021 )

In PowerShell ISE kann mit Strg+J eine Vorlage fĂŒr ein PowerShell Cmdlet eingefĂŒgt werden. Die Vorlage erweitert das Skript um Elemente fĂŒr die Dokumentation und gibt damit der integrierten PowerShell-Hilfe alle notwendigen Informationen fĂŒr das Cmdlet: "get-help". ... weiterlesen

Preview PowerShell Übergabe von Variablen an ein Skript (Param)

PowerShell Übergabe von Variablen an ein Skript (Param)

geÀndert: 10.10.2016 von Bernhard (Erstveröffentlichung: 12.07.2016 )

Zu Beginn eines PowerShell Scripts können Parameter in der Funktion Param() definiert werden. ... weiterlesen

Preview PowerShell Errorhandling:  Write-Debug DebugPreference

PowerShell Errorhandling: Write-Debug DebugPreference

geÀndert: 11.10.2016 von Bernhard (Erstveröffentlichung: 13.02.2016 )

Damit die Fehlersuche in PowerShell einfacher wird, können bei Bedarf zusÀtzliche Debug-Ausgaben in das Skript eingebaut werden. ... weiterlesen

PowerShell Aufruf von einer Batch-Datei cmd - Errorlevel

PowerShell Aufruf von einer Batch-Datei cmd - Errorlevel

erstellt: 16.09.2021 von Bernhard

Der Aufruf eines PowerShell-Skripts aus der Eingabeaufforderung: cmd oder ĂŒber eine Batch-Datei kann ĂŒber die powershell.exe erfolgen. Sollten mehrere PowerShell-Scripts gestartet werden, kann der Exitcode / das ErrorLevel pro Zeile behandelt werden. In der Batch-Datei wird dafĂŒr die Variable %errorlevel% verwendet. %errorlevel% enthĂ€lt den Returncode der zuletzt ausgefĂŒhrten Zeile: ... weiterlesen

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE fĂŒr deine Bewertung!

Aktualisiert: 05.04.2022 von Bernhard | Translation English |🔔

➚ PowerShell Grundlagen | ➊ Windows PowerShell | PowerShell Grundlagen: Daten, Schleifen und Bedingungen ➚

Top-Artikel in diesem Bereich


PowerShell Log-Files: Logging in eine Textdatei - write to file

Logfiles in PowerShell können ĂŒber den Befehl Out-File, ĂŒber eine eigene Funktion oder ĂŒber das in PowerShell integrierte Transcript erstellt werden.


PowerShell regex - EinfĂŒhrung und Beispiele

Regex kann in den meisten Skriptsprachen nahezu gleich verwendet werden, daher habe ich die Grundbegriffe und Funktionsweise in einem gesonderten Beitrag zusammengefasst, siehe Regex - Überblick. Dieser Beitrag beinhaltet SpezialiĂ€ten bei der Verwendung von Regex in PowerShell, sowie die Beispiele des Regex - Grundlagen Artikels.   Powershell: verschiedene Regex-Varianten PowerShell verfĂŒgt ĂŒber eigene Regex-Operatoren, als Beispiel: -match oder -replace. Nachdem Po...


PowerShell Textdatei und csv lesen / schreiben

Dieser Artikel ist eine Zusammenfassung von Beispielen fĂŒr das Erstellen und Auslesen von Text und CSV Dateien in PowerShell.

Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

✍anonym
05.09.2019 10:32
User: Joey 
Ich benötige den Code damit ich mein Powershellscript starten kann und die Windows apps deinstalliert werden. Hab das schon ein Script ist auch automatisiert nur das Problem ist ich kann es nicht Automatisiert starten. Ich kopier sozusagen den Text in Powershell und starte so das Script. Könnte mir da jemand bitte weiterhelfen. Danke

# UnerwĂŒnschte Apps anzeigen und ggf. entfernen (fĂŒr den aktuellen Benutzer)

$unerwĂŒnschteApps = "xboxapp", "BingNews", "Dolby", "BingWeather", "Zune", "WindowsCamera", "WindowsMaps","Microsoft.People","PhotoShopExpress","Microsoft.OneConnect","Solitaire","Print3D","SoundRecorder","Duolingo","freshpaint","3D Builder","Feedback Hub","Sway","Get Office","Groove Music","Microsoft Wallet"
$remove = $true

foreach($a in $unerwĂŒnschteApps)
{
Write-Host "Installierte Apps mit $a im Titel:" -ForegroundColor Yellow
$menge = Get-AppxPackage | where name -like "*$a*" # Get-AppxProvisionedPackage -Online / DisplayName
$menge | ft
if ($menge.length -eq 0) { Write-Host "Keine :-)" -ForegroundColor green }
    else { if ($remove) {
        "Entferne $($menge.length) Apps.."
        $menge | Remove-AppxPackage # Remove-AppxProvisionedPackage -online
        
        $menge = Get-AppxPackage | where name -like "*$a*"  
        if ($menge.length -gt 0)
        {
         Write-Host "folgende Apps wurden NICHT entfernt:" -ForegroundColor red
         $menge | ft
        }
     }
  }
}

✍anonym
11.01.2019 11:39
User: SubPORT 
Hey Webmaster, vielen Dank fĂŒr die tolle Seiten. Daumen hoch.

✍anonym
08.08.2019 10:40
User: king 
hat nichts gebracht

✍anonym
09.08.2018 17:13
User: Peter 
Hallo,
benötige ein Script fĂŒr :
wenn 
cd p:         falsch
dann 
start explorer.exe p:
bin 72 Lenze und kapiere nicht mehr alles.
LG Peter

✍anonym
07.02.2017 11:34
User: Allwissender 
Hey,
falls ihr etwas im AD machen möchtet benötigt ihr die Powershell Version mit AD Modulen ;)


MfG

✍anonym
03.07.2016 16:52
User: ay1965 
Hallo, ich soll ein Script schreiben . Mit dem Script soll eine OberflĂ€che erzeugt werden worin ich Drucker und PC's eingeben und zueinander zuordnen kann. Vielen Dank fĂŒr jede Hilfe.

✍anonym
17.06.2016 13:11
User: Tony 
Hallo Zusammen,
habe eine kurze Frage,
wie kann ich einen PS Script schreiben, und zwar folgendes;
Ich habe den befehl (shutdown -r -t 0) geschrieben damit mein Server einen Neustart macht, aber dazu muss ich denn befehl so geben dass er nur den Neustart machen muss wenn kein Benutzer angemeldet ist und falls ein Benutzer angemeldet ist soll er keinen Neustart machen sondern eine Log datei erstellen welche Benutzer Angemeldet waren.

Kann mir jemand hier weiterhelfen?

Besten Dank

✍anonym
14.02.2016 10:50
User: Lisa 
Gibt es eine Möglichkeit, die Uefi-Firmware in der Powershell zu konfigurieren. Das, weil die Default-Einstellungen der Firmware sich nicht uneingeschrĂ€nkt Ă€ndern lassen. vor allem lĂ€sst sich CSM nicht auf Enabled setzen. Damit ließe sich Windows nicht selbst von außen reparieren (PCW-Notfallsystem u. Ă€.)

✍anonym
25.09.2015 07:05
User: Simon 
Hallo ich möchte ein Script schreiben, dass alle Admins in unserem System ausliest und die Passwörter zurĂŒcksetzt wie soll ich vorgehen. Ich hab viele male gelesen, dass Get-ADGroupMember zum auslesen funktionieren soll aber bei mir wird nicht einmal der Command gefunden 

✍anonym
20.01.2015 09:41
User: anna 
ich möchte ein script erstllen, dass inhalte aus einer html seite heraulesen kann und diese dann in einem monitoringsystem anzeigen lassen (PRTG)..  leider habe ich mit powershell noch keine erfahrungen 

✍anonym
08.09.2014 11:27
User: InteressierterBeginner 
Fange allmlich mit Powershell an (Bedingt durch Job :P) Hat schonmal f den Anfang gelangt. Hoffe es folgen weitere Beispiele :P :P 

✍anonym
27.02.2013 08:28
User: interessierter 
Auf jeden Fall mal Danke! f die tollen Tips - mach weiter so und ich werde noch ein Fan von dir :)