- 1 Section
- 10 Lessons
- unbegrenzt
- PowerShell – Grundlagen bis Automation10
- 1.1Was ist PowerShell? Versionen und ISE vs. VS Code
- 1.2Cmdlets: Verben, Substantive, Get-Help
- 1.3Variablen, Datentypen und Pipeline
- 1.4Kontrollstrukturen: if, switch, for, foreach, while
- 1.5Funktionen und Module
- 1.6Dateisystem und Prozesse verwalten
- 1.7Active Directory mit PowerShell verwalten
- 1.8Netzwerkbefehle: Test-NetConnection, Resolve-DnsName
- 1.9Skripte planen: Task Scheduler
- 1.10Praxisprojekt: AD-Onboarding-Skript
Was ist PowerShell? Versionen und ISE vs. VS Code
PowerShell ist Microsofts Antwort auf Bash. Wenn du Windows-Server administrierst, ist sie das Werkzeug der Wahl – ähnlich wie Bash auf Linux in K43. Aber Achtung: PowerShell ist nicht einfach Bash für Windows. Sie ist nach einer komplett anderen Philosophie gebaut.
Der wichtigste Unterschied: PowerShell arbeitet mit Objekten, nicht mit Text. Während bei Bash zwischen den Tools nur Zeichenketten fließen (und du sie mit awk/sed/grep wieder zerlegst), gibt PowerShell echte strukturierte Objekte mit Eigenschaften und Methoden weiter. Dieser eine konzeptionelle Unterschied verändert alles – und macht PowerShell für komplexe Aufgaben oft eleganter als Bash.
1) Der zentrale Unterschied: Objekte statt Text
Stell dir vor du fragst dein System: „gib mir alle Prozesse, sortiert nach Speicher, die ersten fünf". In Bash bekommst du eine Tabelle als Text – und musst sie mit awk, sort, head Spalte für Spalte zerlegen. In PowerShell bekommst du eine Liste von Process-Objekten, die du direkt mit ihren Eigenschaften ansprechen kannst:
.CPU, .WorkingSet, .Name). Bash-Pipelines transportieren Strings die jedes Tool neu parsen muss. Das hat Vor- und Nachteile – mehr dazu in L3 Pipeline.2) Was IST PowerShell technisch?
Unter der Haube ist PowerShell tief mit der .NET-Plattform verwoben. Jedes Objekt das du in PowerShell anfasst, ist ein .NET-Objekt – derselbe Typ wie ihn ein C#- oder F#-Programm verwenden würde. Das ist auch der Grund warum die Pipeline mit echten Objekten funktioniert: PowerShell muss nichts ausdenken, sondern reicht einfach .NET-Instanzen weiter.
Diese Verzahnung hat einen großen Nebeneffekt: du kannst aus PowerShell heraus auf die gesamte .NET-Welt zugreifen. Brauchst du eine GUID? [System.Guid]::NewGuid(). Eine HTTP-Anfrage low-level? [System.Net.WebClient]. Datum formatieren? Alle Methoden des .NET-DateTime-Typs verfügbar. PowerShell ist insofern weniger eine Shell, mehr ein Scripting-Frontend für .NET mit Shell-artiger Bedienung.
Ein passender Vergleich: Bash steht zu Unix-Tools wie PowerShell zu .NET steht. In Bash rufst du externe Programme auf (grep, awk, sed). In PowerShell rufst du Cmdlets auf, die intern aber .NET-Funktionen ausführen – das ist effizienter und konsistenter, weil keine Inter-Prozess-Kommunikation über Streams nötig ist.
3) Versionen und Plattformen
PowerShell hat eine etwas verwirrende Geschichte. Es gibt zwei Familien die parallel existieren:
powershell.exe startet 5.1, pwsh.exe startet 7.x. Erkennen kannst du sie an der Variable $PSVersionTable.4) Die ersten Schritte: PowerShell starten
Auf Windows hast du PowerShell schon. Drei Wege sie zu öffnen:
- Startmenü → „PowerShell" tippen → entweder „Windows PowerShell" (5.1) oder „PowerShell" (7.x falls installiert)
- Windows Terminal (modern, auf Windows 11 vorinstalliert) – kann mehrere Shells in Tabs, inkl. PowerShell, cmd, WSL/Bash
- Tastenkombination: Win+X → „Terminal" (oder „PowerShell")
Wenn du als Admin etwas ändern willst: per Rechtsklick „als Administrator ausführen". Im Prompt erkennst du das an „Administrator:" am Anfang des Titels. Ohne Admin-Rechte kannst du viele System-Befehle nur lesend ausführen. Auf Linux/macOS installierst du PowerShell 7 per Paketmanager (apt, brew) und startest sie mit pwsh.
Der Prompt zeigt standardmäßig dein aktuelles Verzeichnis. Mit $PSVersionTable bekommst du strukturierte Versions-Infos – beachte: es ist ein Objekt mit Properties, kein simpler String. Auf das kommen wir in L3 nochmal zurück.
5) ISE oder VS Code? Die Editor-Frage
Für richtige Skripte brauchst du einen Editor – nicht die Konsole. Microsoft hat lange das PowerShell ISE (Integrated Scripting Environment) mitgeliefert, ein eigener Editor speziell für PowerShell. Heute ist die Empfehlung aber klar VS Code mit PowerShell-Extension:
- Sofort verfügbar, keine Installation
- Integrierter Debugger
- Kennt nur PowerShell 5.1
- Wird von Microsoft nicht mehr weiterentwickelt
- Unterstützt KEIN PowerShell 7
- Keine moderne Features (Git, Multi-Cursor)
- Aktiv entwickelt, moderne UX
- Funktioniert mit PS 5.1 UND 7.x
- Git-Integration, Multi-Cursor, Themes
- IntelliSense und Code-Completion
- Funktioniert auch für andere Sprachen (Python, JavaScript)
- Integriertes Terminal direkt eingebaut
code.visualstudio.com herunterladen, im Extensions-Marketplace „PowerShell" suchen → Extension von Microsoft installieren. Fertig. Beim Öffnen einer .ps1-Datei aktiviert sich die Extension automatisch. Tastenkürzel F5 führt das Skript aus, F8 nur die markierte Zeile. ISE solltest du heute nicht mehr für neue Projekte nehmen – es wird nur noch aus Kompatibilitätsgründen mitgeliefert.6) Skript-Dateien: .ps1
PowerShell-Skripte enden auf .ps1 – egal welche Version. Eine Datei hallo.ps1 könnte so aussehen:
Ein paar Beobachtungen: Variablen beginnen mit $ (wie in Bash) – aber das Zuweisen erlaubt Leerzeichen um das = (anders als Bash!). Cmdlets folgen dem Schema Verb-Substantiv (siehe nächste Lektion). Strings in Anführungszeichen interpolieren Variablen – mit $() kannst du sogar Ausdrücke einbetten.
Aber: bevor du diese Datei einfach so ausführen kannst, kommt der nächste Stolperstein.
7) Execution Policy – PowerShell's Sicherheitsmechanismus
Anders als Bash hat PowerShell standardmäßig eine Execution Policy, die das Ausführen von Skripten regelt. Microsoft will damit verhindern, dass Anwender versehentlich Schadcode aus dem Internet starten. Beim ersten Versuch .\hallo.ps1 auszuführen siehst du wahrscheinlich:
Das ist kein Fehler in deinem Skript – PowerShell lässt es einfach gar nicht erst laufen. Die Policies sind:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned. Anzeigen mit Get-ExecutionPolicy -List. Das ist sehr ähnlich zur chmod +x-Logik bei Bash, aber auf Skript-Ebene und mit Signatur-Prüfung. Mehr zu Code-Signaturen in K08 Krypto.8) Vergleich zu cmd.exe
Falls du Windows von früher kennst: cmd.exe (die alte „Eingabeaufforderung") gibt es noch. Sie unterscheidet sich grundlegend von PowerShell:
| Aspekt | cmd.exe | PowerShell |
|---|---|---|
| Erste Version | 1987 (MS-DOS 4.0) | 2006 (auf Basis .NET) |
| Pipeline | Text | Objekte |
| Konsistenz | uneinheitliche Befehle (dir, copy, del) | Verb-Substantiv-Schema (Get-ChildItem, Copy-Item) |
| .NET-Zugriff | nein | vollständig |
| Skript-Sprache | Batch (.bat/.cmd) – sehr limitiert | vollwertige Skriptsprache |
| Heute relevant? | Legacy, nur noch für sehr alte Skripte | Standard für Windows-Admin |
PowerShell-Cmdlets haben Aliases für die alten cmd-Befehle: dir ist Alias für Get-ChildItem, cd für Set-Location, cls für Clear-Host. So funktionieren viele Gewohnheiten direkt weiter. Sogar einige Bash-Befehle sind aliased: ls, cp, mv, rm, cat – das wurde extra für Linux-Umsteiger eingebaut.
9) Wofür wird PowerShell heute eingesetzt?
PowerShell ist DAS Werkzeug für Windows-Administration. Konkrete Einsatzgebiete:
- Windows Server-Verwaltung: Services, Updates, Rollen installieren
- Active Directory: Users, Groups, OUs erstellen und ändern (siehe L7)
- Microsoft 365 / Azure: Cloud-Verwaltung (Office 365, Exchange Online, Azure AD)
- Massen-Operationen: 100 neue User auf einmal anlegen, Bulk-Mailbox-Konfiguration
- Reporting: Inventar-Listen, Compliance-Checks, Ausgabe nach CSV/HTML
- DevOps / CI/CD: Deployment-Skripte, vor allem in Microsoft-Umgebungen
- Plattformübergreifend: seit Core auch zur Linux-Administration nutzbar (selten, aber möglich)
Als FISI brauchst du PowerShell zwingend wenn du mit Windows-Systemen arbeitest. Manche Admin-Aufgaben sind nur über PowerShell verfügbar (z.B. moderne Exchange-Verwaltung). Auch viele AD-Operationen über die grafische Konsole sind langwierig – mit PowerShell oft eine Zeile.
10) Erste echte Aufgabe: Top 5 Prozesse
Lass uns das oben gezeigte Beispiel jetzt wirklich verstehen – Zeile für Zeile:
Was passiert hier? Get-Process liefert alle laufenden Prozesse als Objekte. Sort-Object WorkingSet -Descending sortiert sie nach Speicherverbrauch absteigend. Select-Object -First 5 nimmt die ersten fünf. Format-Table stellt sie als Tabelle dar – die letzte Spalte ist eine Berechnung: WorkingSet (in Bytes) durch 1 MB geteilt, auf 2 Nachkommastellen gerundet.
Beachte das $_ – das ist die Variable für „das aktuelle Element in der Pipeline". In Bash gibt es nichts Vergleichbares, weil dort ohnehin nur Text fließt. In PowerShell ist $_.WorkingSet der Zugriff auf die WorkingSet-Property des aktuell durchgereichten Objekts. Mehr dazu in L3.
Du musst das jetzt nicht verstehen – aber merke dir: was in Bash mehrere Tools, awk-Geschicklichkeit und schlecht parsbare Spalten braucht, ist in PowerShell eine Zeile mit klaren, lesbaren Cmdlet-Namen. Dafür ist die Lernkurve am Anfang etwas steiler.
11) Was kommt in diesem Kurs?
Wir bauen das Wissen systematisch auf:
- L1 (hier) – Grundkonzepte und Einrichtung
- L2 Cmdlets – Verb-Substantiv-Schema, Get-Help, Discover-Pattern
- L3 Variablen + Pipeline – das Herz: wie Objekte fließen
- L4 Kontrollstrukturen – if, switch, for, foreach, while
- L5 Funktionen + Module – wiederverwendbarer Code
- L6 Dateien + Prozesse – tägliche Admin-Aufgaben
- L7 Active Directory – Users, Groups, OUs (FISI-Klassiker)
- L8 Netzwerk – Test-NetConnection, DNS, Konfiguration
- L9 Task Scheduler – Skripte zeitgesteuert (cron-Pendant)
- L10 Praxisprojekt – ein komplettes AD-Onboarding-Skript
Wenn du Bash kennst (K43), kommen dir viele Konzepte vertraut vor – aber denke immer „Objekte statt Text" und du sparst dir viele Aha-Momente. Wenn du noch keine Shell kennst: PowerShell ist ein guter Einstieg, weil die Cmdlet-Namen so selbsterklärend sind.
Zusammenfassung
PowerShell ist Microsofts Scripting-Umgebung, eng mit .NET verzahnt. Der zentrale Unterschied zu Bash: Pipelines transportieren Objekte, nicht Text – dadurch kein Parsen, robuste Verarbeitung. Zwei Linien: Windows PowerShell 5.1 (eingebaut, Windows-only) und PowerShell 7.x (modern, plattformübergreifend). Aufruf: powershell.exe bzw. pwsh.exe. Editor: heute VS Code mit PowerShell-Extension, ISE nur noch Legacy. Skripte enden auf .ps1. Vor dem ersten Lauf: Execution Policy auf RemoteSigned setzen mit Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned. PowerShell ist DAS Werkzeug für Windows-Server-Admin, AD-Verwaltung, M365/Azure, Bulk-Operationen und Reporting.
