Software

Powershell: 7 Profi-Tricks für Windows

05.06.2019
Von Thorsten Eggeling
Mit der Powershell und der Eingabeaufforderung bietet Microsoft zwei sehr einflussreiche Steuerungsbereiche für Windows. Darüber lassen sich Funktionen oder Tools realisieren, die Sie bei der täglichen PC-Nutzung unterstützen.

Wer einen oder mehrere Windows-Rechner verwaltet oder wartet, muss oft spezielle Probleme lösen oder die Windows-Umgebung genauer untersuchen. Oft ist dafür kein Zusatztool nötig. Die geschickte Kombination mehrerer Programme und die Nutzung von Powershell-Skripten ermöglichen es, einen individuellen Werkzeugsatz für die gewünschten Aufgaben zu erstellen. Auf diese Weise können Sie beispielsweise schnell Backups erstellen, die aktuelle IP-Adresse anzeigen lassen, Änderungen in der Registry vornehmen oder Dateien für Backups in Archive packen.

Den Möglichkeiten sind fast keine Grenzen gesetzt, allerdings steigt der Aufwand bei komplexeren Skripten deutlich. Diese selbst zu erstellen lohnt sich nur, wenn Sie eine Funktion regelmäßig nutzen. Im Internet finden sich jedoch zahlreiche Batchund Powershell-Skripte, die Sie gleich einsetzen können. Über das Tool PC-WELT-Skript-Downloader können Sie einige von uns getestete und angepasste Skripte herunterladen und ausprobieren. Im Download sind außerdem alle Befehlszeilen aus diesem Artikel und die Downloadadressen enthalten.

In den Punkten 1 bis 5 erklären wir die nötigen Grundlagen für die Nutzung der Eingabeaufforderung und der Powershell. Ab Punkt 6 geht es dann um die Funktionen und Anpassung der Skripte. Diese können Sie unmittelbar nutzen, sie demonstrieren aber zugleich wichtige Prinzipien der Skripterstellung.

1. Interaktiv auf der Kommandozeile arbeiten

Die Eingabeaufforderung hält für die meisten Befehle und auch für externe Tools eine kurze Hilfe bereit.
Die Eingabeaufforderung hält für die meisten Befehle und auch für externe Tools eine kurze Hilfe bereit.

Shells wie die Eingabeaufforderung oder die Powershell erwarten Befehle, die Sie eintippen und mit der Enter-Taste bestätigen, was etwa einem Klick auf "OK" in der GUI entspricht. Befehle oder Programmaufrufe verwenden Sie meist in Kombination mit Parametern, die das Verhalten ändern beziehungsweise angeben, was ein Befehl verarbeiten soll. Parameter, die die Funktionen eines Befehls beeinflussen, werden unter Windows meist mit einem vorangestellten "/" oder "-" eingeleitet. Das sieht in der allgemeinen Form dann so aus:

Befehl /Param1 /Param2 Dateiname

Damit die Shell die übergebenen Argumente verarbeiten kann, sind diese jeweils mit einem Leerzeichen getrennt. Das führt jedoch zu Problemen, wenn Sie beispielsweise "Langer Dateiname" verwenden wollen.

Die Eingabeaufforderung oder Powershell interpretiert das dann als zwei Parameter, was zu einer Fehlermeldung wie "Datei nicht gefunden" führt. Das lässt sich vermeiden, indem Sie Datei- oder Ordnernamen in Anführungszeichen setzen:

Befehl /Param1 "Langer Dateiname" Beachten Sie außerdem, dass bei einigen Ordnern im Windows-Explorer nicht der tatsächliche Ordnername im Dateisystem angezeigt wird. "C:\Benutzer" beispielsweise ist in einer Shell als "C:\Users" zu sehen, und "C:\Programme" heißt eigentlich "C:\ Program Files".

Umgebungsvariablen einrichten.
Umgebungsvariablen einrichten.

Eingabeaufforderung: Die Eingabeaufforderung verfügt über interne Befehle, die in cmd.exe enthalten sind. Beispiele dafür sind dir, mit dem sich der Inhalt eines Ordners anzeigen lässt, oder der Befehl cd, mit dem Sie das Verzeichnis wechseln. Fast alle Befehle liefern einen Hilfetext, indem Sie /? als Parameter übergeben:

Beliebige Programme für die Kommandozeile und die grafische Oberfläche lassen sich über ihren Namen starten. Tippen Sie beispielsweise Notepad ein und bestätigen Sie mit der Enter-Taste, um den Editor zu starten. Das funktioniert jedoch nur, wenn das Programm im aktuellen Ordner liegt oder der Installationsordner in der Path-Variablen hinterlegt ist. Ob das der Fall ist, ermitteln Sie mit der Zeile

Bei Bedarf nehmen Sie weitere Ordner in die Pfadvariable auf. Für die gerade laufende Eingabeaufforderung verwenden Sie dafür beispielsweise die Zeile

echo %PATH%

Soll die Pfadvariable standardmäßig auch für eine neu gestartete Eingabeaufforderung gelten, drücken Sie die Tastenkombination Win-R und starten rundll32 sysdm.cpl,EditEnvironmentVariables. Es öffnet sich das Fenster "Umgebungsvariablen"; darin können Sie den Pfad für den aktuell angemeldeten Benutzer oder unter "Systemvariablen" systemweit ändern. Diese Einstellungen gelten auch für die Powershell.

powershell: Die Powershell funktioniert auf den ersten Blick wie die Eingabeaufforderung. Auch hier geben Sie Befehle oder Programmnamen ein und bestätigen mit der Enter-Taste. Viele Kommandos sind sogar identisch, beispielsweise dir und cd. Der Befehl dir existiert jedoch nicht wirklich. Er ist ein Alias für das Powershell-Kommando "Get-ChildItem". Welche Alias-Bezeichnungen vergeben sind, ermitteln Sie mit

Get-Alias

Eine Liste aller Befehle erhalten Sie über

Get-Command

Hilfetexte gibt es ebenfalls. Es ist empfehlenswert, zuerst den Befehl

Update-Help

in einer Powershell zu verwenden, die Sie mit administrativen Rechten gestartet haben, um die Hilfedateien zu aktualisieren.

Wie heißt der Parameter? Mit Get-Help erhalten Sie in der Powershell Hilfe zu jedem Kommando
Wie heißt der Parameter? Mit Get-Help erhalten Sie in der Powershell Hilfe zu jedem Kommando

Mit beispielsweise

Get-Help Get-ChildItem

erhalten Sie Hilfe zum angegebenen Befehl und mit

Get-Help Get-ChildItem -examples

Beispiele zur Verwendung.

Ihre Stärken beweist die Powershell bei der Kombination von Befehlen. Mit den zwei Zeilen

Set-Location "$env:USERPROFILE\Documents"

Get-ChildItem -Path *.doc -recurse | sort FullName | select FullName

wechseln Sie zuerst in den Ordner "Documents". Die zweite Zeile erstellt eine Liste aller .doc-Dateien, sortiert nach dem Namen ("sort FullName") und mit dem kompletten Pfad ("select FullName"). Das Zeichen "|" (AltGr-<) leitet die Ausgabe eines Befehls an den nachfolgenden weiter.

Hinweise: Eingabeaufforderung und Powershell unterscheiden in der Regel nicht zwischen Groß- und Kleinschreibung. Wenn wir eine Gemischtschreibung verwenden, dient das nur der besseren Lesbarkeit. Beide Shells unterstützen die automatische Ergänzung über die Tab-Taste. In der Eingabeaufforderung tippen Sie beispielsweise

dir c:\Pr

ein und drücken die Tab-Taste. "C:\Program Files" wird automatisch inklusive Anführungszeichen ergänzt. Drücken Sie die Tab-Taste mehrmals, um durch die möglichen Ordner zu blättern. In der Powershell funktioniert das genauso. Zusätzlich können Sie sich auch Vorschläge zu Befehlen anzeigen lassen, beispielsweise mit Get-, gefolgt durch die Tab-Taste.

2. Komfortable Editoren für Skriptdateien nutzen

Windows Powershell ISE: Der Skript-Editor gehört zum Lieferumfang von Windows 7, 8.1 und 10.
Windows Powershell ISE: Der Skript-Editor gehört zum Lieferumfang von Windows 7, 8.1 und 10.

Es ist mühsam, längere Befehlszeilen immer wieder eintippen zu müssen. Deshalb lassen sich die gewünschten Befehle in Batchdateien (Stapelverarbeitung) beziehungsweise Powershell-Skripten zusammenfassen. Dabei handelt es sich um einfache Textdateien, die sich etwa mit dem Windows-Editor Notepad erstellen lassen. Es ist jedoch komfortabler, dafür einen verbesserten Editor wie Notepad++ zu verwenden. Im Programm lassen sich mehrere Dateien in Tabs öffnen. Die automatische Syntax-Hervorhebung färbt Befehle für die bessere Lesbarkeit unterschiedlich ein, was die Orientierung im Quelltext erleichtert.

Für Powershell gehört der Editor Windows Powershell ISE (Integrated Scripting Environment) zum Lieferumfang von Windows 7 bis 10. Syntax-Hervorhebung gibt es hier ebenfalls, außerdem Intellisense für die automatische Ergänzung eingetippter Befehle und eine Hilfe mit Befehls- und Parameter-Übersicht. Skripte lassen sich direkt über den Editor starten und die Funktionen untersuchen (Debugger).

Visual Studio Code: Ein weiterer kostenloser Editor von Microsoft.
Visual Studio Code: Ein weiterer kostenloser Editor von Microsoft.

Noch mehr Funktionen bietet Visual Studio Code , ein kostenloser Quelltexteditor von Microsoft. Das Programm leistet Ähnliches wie Windows Powershell ISE, zeigt sich aber in einem frischeren Design und unterstützt auch andere Skript- und Programmiersprachen. Über Erweiterungen lassen sich weitere Komfortfunktionen nachrüsten. Wenn Sie das erste Mal ein Powershell-Skript öffnen, schlägt Visual Studio Code die Installation einer dazu passenden Erweiterung an, die Sie per Klick auf "Install" annehmen sollten.

3. Powershell für die Ausführung von Skripten konfigurieren

Powershell lässt sich interaktiv ohne Einschränkungen nutzen, wie in Punkt 1 beschrieben. Windows ist jedoch aus Sicherheitsgründen so konfiguriert, dass sich Skripte in der Shell nicht ausführen lassen. Wer Powershell-Skripte selbst erstellen oder aus dem Internet heruntergeladene verwenden möchte, muss daher die Beschränkungen lockern.

Wo die Profilskripte liegen müssen, ermitteln Sie über die Variable “$Profile“ und ihre Varianten.
Wo die Profilskripte liegen müssen, ermitteln Sie über die Variable “$Profile“ und ihre Varianten.

tarten Sie eine Powershell als Administrator und führen Sie die folgende Befehlszeile aus:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Remotesigned

Damit erlauben Sie dem aktuellen Benutzer die Skriptausführung in der Powershell. Soll die Einstellung für den PC gelten, verwenden Sie hinter "-Scope" den Wert "LocalMachine". "Remotesigned" bedeutet, dass aus dem Internet heruntergeladene Skripte digital signiert sein müssen, um starten zu können. Dass Dateien aus dem Internet stammen, erkennt Windows an einem beim Download angehängten NTFS-Stream. Der lässt sich entfernen, indem Sie die heruntergeladene Datei mit der rechten Maustaste anklicken, "Eigenschaften" wählen, ein Häkchen bei "Zulassen" setzen und dann auf "OK" klicken. Sie sollten sich dann allerdings sicher sein, dass ein Skript keinen Schadcode enthält.

Ob die Ausführungsrichtline gilt, hängt allerdings davon ab, wie Sie ein Skript starten. Powershell-Skripte mit der Dateinamensweiterung ".ps1" lassen sich im Windows-Explorer mit der rechten Maustaste anklicken und dann "Mit Powershell ausführen" starten. In der Registry ist für diesen Dateityp Folgendes hinterlegt:

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & ‚%1'"

Wenn die Ausführungsrichtlinie nicht auf "AllSigned" eingestellt ist, was die Ausführung aller nicht signierten Skripts unterbindet, lässt sich das Skript starten. Sie können mit der gleichen Methode Skripte starten, wenn Sie die Einstellung nicht mit Set-ExecutionPolicy ändern wollen. Es genügt, über Win-R diese Befehlszeile auszuführen:

powershell –ExecutionPolicy Bypass

Lassen Sie sich die Einstellungen über

Get-Executionpolicy -list

ausgeben. Hinter "Process" steht jetzt "Bypass".

Die Einschränkungen für das aktuelle Powershell-Fenster sind damit aufgehoben.

4. Powershell-Profile nehmen Funktionen und Aliasse auf

Powershell kann bis zu vier Skripte automatisch beim Start laden. Welche Datei zuständig ist, kann man den dafür vorgegebenen Variablen entnehmen. Sie lauten:

$Profile.AllUsersAllHosts

$Profile.AllUsersCurrentHost

$Profile.CurrentUserAllHosts

$Profile.CurrentUserCurrentHost

"$Profile" entspricht "$Profile.CurrentUser- CurrentHost" und enthält den Pfad "C:\ Users\[Benutzer]\Documents\WindowsPowerShell\ Microsoft.PowerShell_profile. ps1". "$Profile.CurrentUserAllHosts" verweist auf die Datei "C:\Users\[Benutzer]\ Documents\WindowsPowerShell\profile.ps1", die beispielsweise auch der Editor Windows Powershell ISE berücksichtigt. Standardmäßig sind weder der Pfad noch ps1-Datei vorhanden (siehe Punkt 5).

Die Profilskripte eignen sich für Alias-Definitionen und benutzerdefinierte Funktionen. Außerdem können Sie darüber Module laden, die in jeder Powershell-Sitzung verfügbar sein sollen.

Tipp: So haben Sie Windows im Griff mit Bordmitteln

5. Beispielskripte über PC-WELT Skript-Downloader installieren

PC-WELT Skript-Downloader lädt die Beispieldateien herunter.
PC-WELT Skript-Downloader lädt die Beispieldateien herunter.

Kopieren Sie PC-WELT Skript-Downloader in einen beliebigen Ordner auf der Festplatte und starten Sie das Programm. Wir gehen davon aus, dass die Profildateien "Microsoft.PowerShell_profile.ps1" und "Profile.ps1" sowie der Ordner "C:\Users\[Benutzer]\Documents\Windows PowerShell\" bisher nicht vorhanden sind. Wenn doch, erstellen Sie ein Backup des Ordners, damit keine Dateien überschrieben werden. Klicken Sie in PC-WELT Skript-Downloader auf die Schaltfläche "Download starten". Anschließend können Sie per Klick auf "Powershell öffnen" eine Powershell starten und die neuen Funktionen ausprobieren.

Sollte die Powershell einen Fehler wie "Microsoft. PowerShell_profile.ps1 kann nicht geladen werden" ausgeben, ändern Sie die Ausführungsrichtlinie auf "Remotesigned" wie in Punkt 3 beschrieben.

6. Funktionen und Aliasse für den Schnellstart definieren

Funktionen beim Powershell-Start automatisch laden.
Funktionen beim Powershell-Start automatisch laden.

Sehen Sie sich zuerst die Definitionen in der Profildatei an. Dazu verwenden Sie diese Befehlszeile:

Der Inhalt der Variablen "$Profile" wird an Notepad übergeben und die Datei öffnet sich. Enthalten sind einige Funktionen, die für mehr Komfort sorgen. Beispielsweise

Function no {notepad $args[0]}

Der Name der Funktion ist "no", in den geschweiften Klammern stehen die Befehle. "notepad" startet den Windows-Editor und "$args[0]" enthält den Dateinamen. Der Aufruf in der Powershell mit

no C:\TestDatei.txt

startet Notepad und öffnet die Datei "C:\TestDatei.txt". Ist diese nicht vorhanden, fragt Notepad, ob Sie die Datei neu erstellen wollen.

Um Notepad zu starten, würde auch eine Alias-Definition wie

Set-Alias no Notepad

function Get- EnvironmentVariablesDialog { rundll32 sysdm.cpl,EditEnvironmentVariables }

genügen. "Set-Alias" versteht jedoch keine zusätzlichen Parameter hinter dem Programmaufruf. Lediglich der Dateiname, den Sie in der Shell angeben, wird verarbeitet. Für mehr Parameter wird eine Funktion benötigt, die sich dann allerdings mit einem Alias abkürzen lässt. Das Beispiel

Set-Alias EnvGui Get-EnvironmentVariablesDialog

ermöglicht es, den Dialog "Umgebungsvariablen" (Punkt 1) über die Funktion "Get- EnvironmentVariablesDialog" einfach mit dem Alias EnvGui aufzurufen.

Weitere von uns vordefinierte Funktionen sind ex zum Starten des Windows-Explorers und s, um schnell in das Verzeichnis "${env:userprofile}\Documents\Windows PowerShell" zu wechseln, in dem einige Skriptdateien liegen.

Informationen zu Dateien und Größen: Die Funktion "FindBig" sucht im angegebenen Ordner und seinen Unterordnern mit "Get-ChildItem" (Alias: gci) nach Dateien. Das Ergebnis wird absteigend nach der Größe sortiert, davon nimmt die Funktion die ersten zehn Dateien, rundet und formatiert die Größe in Megabyte und gibt das Resultat mit "Out-GridView" als Tabelle in einem Fenster aus.

"LastTenFiles" zeigt die neuesten 10 Datei an. Mit "Format-Table" erfolgt die formatierte Ausgabe im Fenster der Powershell. "FolderSizes" schließlich ermittelt Ordnergrößen, die Ausgabe wird in der Datei "ErgebnisDerZaehlung.txt" gespeichert und automatisch mit Notepad geöffnet.

Alle Funktionen erwarten einen Pfad als Parameter. Fehlt dieser, wird in "$home" gesucht, dem Profilordner des aktuellen Benutzers.

Bitte beachten Sie: Wenn Sie Änderungen in der Profildatei vornehmen, lesen Sie die Datei mit

.$Profile

neu ein oder Sie starten die Powershell neu.

7. Weitere Funktionen aus den Beispielskripten nutzen

Das Skript GetFolderSizes sortiert Ordner und Unterordner nach der Größe.
Das Skript GetFolderSizes sortiert Ordner und Unterordner nach der Größe.

./GetFolderSizes $env:USERPROFILE\Downloads -Recurse -Descending

Umfangreichere Funktionen bringt man am besten in einer eigenen Skriptdatei mit der Endung ".ps1" unter. Ein Beispiel dafür ist "GetFolderSizes.ps1". Wechseln Sie in der Powershell durch Eingabe von s in den Ordner mit den Skriptdateien und starten Sie das Skript mit

Es erzeugt eine Liste mit allen Unterordnern Ihres Download-Ordners, sortiert nach Größe, und öffnet die HTML-Datei mit dem Ergebnis im Webbrowser.

Ordner in ZIP-Archive packen: Powershell bietet standardmäßig die Funktion "Compress-Archive", die für einfache ZIPArchive ausreicht. Ein Beispiel zeigt das Skript "ZipCompressFolder.ps1". Sie rufen es mit

./ZipCompressFolder $env:USERPROFILE\Documents\MeinBriefe $env:USERPROFILE\Documents

auf, um ein Backup des Ordners "Meine- Briefe" in einer ZIP-Datei zu erstellen. Die ZIP-Datei landet im Ordner "Documents" und trägt als Namen das aktuelle Datum sowie die Uhrzeit.

Wenn Sie die Archivierung automatisieren möchten, verwenden Sie das Skript "Aufgabenplanung.ps1". Bevor Sie es starten, öffnen Sie das Skript im Editor, um Quell- und Zielpfad sowie den Zeitpunkt der Ausführung festzulegen.

Verschlüsselte Archiv-Dateien erstellen: Für die Verschlüsselung benötigen Sie das zusätzliche Modul "7zip4powershell", das im Download aus Punkt 5 bereits enthalten ist. Es verwendet Funktionen aus 7-Zip, das aber nicht installiert sein muss. Das zugehörige Skript starten Sie mit

./7zCompressFolder [Quelle] [Ziel] -Format 7z -Enc

Für die Platzhalter "[Quelle]" und "[Ziel]" setzen Sie den Ordner ein, den Sie komprimieren wollen, sowie den Zielordner für die 7z-Datei. Beim ersten Aufruf fordert es ein Passwort für den Benutzer "7zCompress- Folder" an, das zur Wiederverwendung verschlüsselt in der Datei "7z-secret.txt" gespeichert wird.

E-Mails versenden: Powershell bringt die Funktion "Send-MailMessage" mit, über die Sie E-Mails an einen oder mehrere Empfänger versenden können, bei Bedarf auch mit Anhang. Unser Skript "Send-Mail.ps1" ist nützlich, wenn Sie regelmäßig E-Mails automatisiert an bestimmte Empfänger versenden müssen. Öffnen Sie das Skript in einem Editor und konfigurieren Sie den SMTP-Server (siehe Kommentare im Skript). In der Datei "empf.txt" erwartet das Skript eine Liste mit E-Mail-Adressen (eine pro Zeile). Die Datei "SubjBody.txt" muss in der ersten Zeile den Betreff und in den folgenden Zeilen den Nachrichtentext enthalten. Zum Start verwenden Sie die Batchdatei "Send-Mails-to-list.bat". Beim ersten Aufruf werden Sie nach dem SMTP-Passwort gefragt, das verschlüsselt in der Datei "secret.txt" gespeichert wird.

IP-Info per Skript.
IP-Info per Skript.

Explorer-Kontextmenü ändern: Das Skript "RegistryAccess.ps1" reaktiviert unter Windows 10 den Kontextmenüpunkt "Eingabeaufforderung hier öffnen" (siehe Kasten rechts). Für die dafür zuständigen Registry-Schlüssel "Directory\shell\cmd" und "Directory\Background\shell\cmd" fehlen jedoch selbst Administratoren die Zugriffsrechte. Das Skript zeigt beispielhaft, wie sich Zugriffsrechte und Werte in der Registry ändern lassen. Es verwendet das Modul "PoshPrivilege", das sich auch für die Änderung von Zugriffsrechten im Dateisystem eignet.

IP-Adressen ermitteln: Das Skript "GetIP.ps1" zeigt Ihnen die IPv4-Adressen aller Netzwerkadapter und die öffentliche IP des Routers an. Es ist zugleich ein Beispiel dafür, wie sich über ein Powershell-Skript eine grafische Oberfläche erstellen lässt.

Powershell oder Eingabeaufforderung starten

Die Eingabeaufforderung und die Powershell lassen sich auf unterschiedlichen Wegen starten. Am einfachsten geht es über den Ausführen-Dialog, den Sie mit der Tastenkombination Win-R einblenden. Tippen Sie cmd oder powershell ein und bestätigen Sie per Klick auf „OK“. Oder Sie verwenden unter Windows 10 Win-X und wählen im Menü „Windows PowerShell“ oder „Windows PowerShell (Administrator)“.

Bei Windows 8.1 erscheinen hier „Eingabeaufforderung“ und „Eingabeaufforderung (Administrator)“. Eine weitere Möglichkeit bietet die Suche nach cmd oder powershell, etwa über das Startmenü. Per Rechtsklick auf das Suchergebnis und Auswahl von „Als Administrator ausführen“ lassen sich die Shells mit erhöhten Rechten starten.

Wenn Sie eine Shell gleich für einen bestimmten Ordner öffnen möchten, gehen Sie im Windows-Explorer auf „Datei“. Bei Windows 8.1 gibt es hier „Eingabeaufforderung öffnen“ und „Windows PowerShell öffnen“, ab Windows 10 1703 nur noch „Windows PowerShell öffnen“. Über die jeweiligen Untermenüs lässt sich die Shells mit oder ohne administrative Rechte öffnen.

Halten Sie die Shift-Taste gedrückt und klicken Sie mit der rechten Maustaste auf einen Ordner oder den leeren Hintergrund im Windows-Explorer. Im Kontextmenü sehen Sie bei Windows 8.1 „Eingabeaufforderung hier öffnen“, bei Windows 10 „Powershell hier öffnen“. Wie Sie das Kontextmenü von Windows 10 über ein Powershell-Skript erweitern, lesen Sie in Punkt 7.

(PC-Welt)