- 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
Dateisystem und Prozesse verwalten
Bis hier hast du die Sprache PowerShell gelernt – Variablen, Pipeline, Kontrollstrukturen, Funktionen. Jetzt geht's an die Praxis: tägliche Admin-Aufgaben. Dateien suchen und kopieren, Verzeichnisse anlegen, Prozesse beobachten und stoppen, Services verwalten. Das sind die Aufgaben für die du PowerShell auf einem Windows-Server überhaupt erst lernst.
Eine PowerShell-Eigenheit lernst du hier kennen: das Provider-Konzept. Dateisystem, Registry, Umgebungsvariablen, AD – sie alle werden über das gleiche Cmdlet-Schema angesprochen. Wer Get-ChildItem für Dateien beherrscht, hat es auch für Registry-Keys drauf. Diese konsistente Bedienung ist einer der größten Vorteile von PowerShell gegenüber dem alten cmd.exe.
1) Das Provider-Konzept
Ein PowerShell-Provider macht eine hierarchische Datenquelle wie ein Dateisystem zugänglich. Du benutzt dieselben Cmdlets wie für Dateien – Get-ChildItem, Set-Location, Get-Item – auf völlig unterschiedliche Datenquellen. Wie ein gemeinsames Bedienkonzept für sehr verschiedene „Welten":
Get-PSProvider. Wechseln wie bei Laufwerken: cd HKLM: (= Set-Location HKLM:) – jetzt bist du in der Registry. ls listet Registry-Keys. cd C: bringt dich zurück. Genial: dasselbe Wissen über Cmdlets funktioniert in völlig unterschiedlichen Welten. Auch das AD-Modul bringt einen AD:-Provider mit (mehr in L7).2) Datei- und Verzeichnis-Operationen
Die Basis-Cmdlets fürs Dateisystem – ähnlich strukturiert wie die Bash-Befehle aus K43:
| Aktion | PowerShell | Bash-Pendant |
|---|---|---|
| Inhalt listen | Get-ChildItem (Alias: ls, dir) | ls |
| Verzeichnis wechseln | Set-Location (Alias: cd) | cd |
| Aktuelles Verzeichnis | Get-Location (Alias: pwd) | pwd |
| Neues Verzeichnis | New-Item -ItemType Directory (oder mkdir) | mkdir |
| Datei erstellen | New-Item -ItemType File | touch |
| Kopieren | Copy-Item (Alias: cp, copy) | cp |
| Verschieben/Umbenennen | Move-Item (Alias: mv, move) | mv |
| Löschen | Remove-Item (Alias: rm, del) | rm |
| Datei-Inhalt lesen | Get-Content (Alias: cat, type) | cat |
| Datei-Inhalt schreiben | Set-Content oder Out-File | > Redirect |
| Datei-Inhalt anhängen | Add-Content | >> Redirect |
| Existiert Pfad? | Test-Path | [ -e ] |
Beispiele für tägliche Aufgaben:
3) Datei-Inhalte lesen und schreiben
PowerShell liest Dateien immer als Liste von Zeilen – jede Zeile ein eigenes Objekt in der Pipeline. Das ist anders als bei cat in Bash, das einen Text-Stream zurückgibt:
Encoding-Falle: Windows PowerShell 5.1 schreibt Default in „UTF-16 mit BOM" – das kann andere Programme verwirren. Beste Praxis: immer explizit -Encoding UTF8 angeben. PowerShell 7 ist hier schon besser, nutzt UTF-8 ohne BOM als Default.
4) Datei-Properties: Größe, Datum, Attribute
Jedes File-Objekt aus Get-ChildItem hat dutzende Properties. Die wichtigsten:
5) Prozesse: Get-Process im Detail
Prozesse sind in PowerShell ebenso erstklassige Objekte. Get-Process ist eines der ersten Cmdlets das du kennenlernen solltest:
WorkingSet ist in Bytes – für MB durch 1MB teilen: $_.WorkingSet/1MB -gt 100.Typische Aufgaben rund um Prozesse:
6) Services: Windows-Dienste verwalten
Services sind langlaufende Programme, die im Hintergrund laufen – wie z.B. der Druckspooler, IIS-Webserver oder SQL Server. Sehr wichtig für Server-Admins:
Die Cmdlets dazu:
7) WMI/CIM – tiefer ins System
Get-Process zeigt dir Prozesse, Get-Service Services. Aber was wenn du die installierte RAM-Menge, BIOS-Version, alle Netzwerk-Adapter oder Hotfix-Updates wissen willst? Dafür gibt es CIM (Common Information Model) – eine standardisierte Schnittstelle zur Hardware-/System-Info. Es ersetzt das ältere WMI:
CIM/WMI ist ein riesiges Universum – man könnte ganze Bücher schreiben. Für den Anfang merke dir: wenn du System-Info brauchst die nicht direkt von einem PowerShell-Cmdlet kommt, ist Get-CimInstance dein Werkzeug. Klassen-Namen googeln, Properties mit Get-Member erkunden.
8) Aufgaben kombinieren – ein Praxis-Skript
Lass uns alles zusammenführen – ein Skript das nachts läuft und einen System-Report macht:
Das ist ein realistisches Skript – wenig Zeilen, aber alle Konzepte aus dem Kurs verwendet: Variablen und Pipeline, Schleifen, Properties, CIM, Datei-IO. Einrichten zur nächtlichen Ausführung im Task Scheduler (L9) und du hast Monitoring „für lau".
9) Häufige Fallen bei Datei-Operationen
Drei Stolperfallen die du vermeiden willst:
- Encoding: PowerShell 5.1 schreibt Default UTF-16 mit BOM. Andere Programme stolpern darüber. Immer explizit
-Encoding UTF8. - -Recurse bei Remove-Item: löscht UNGEFRAGT alles im Unterbaum. Erst
Get-ChildItem -Recurseprüfen oder mit-WhatIftesten! - Pfade mit Sonderzeichen: bei eckigen Klammern im Dateinamen
-LiteralPathstatt-Pathnutzen.-Pathinterpretiert sie als Wildcards.
Zusammenfassung
PowerShell-Provider erlauben einheitliche Bedienung: FileSystem (C:), Registry (HKLM:), Environment (Env:), Variable, Function, Alias. Datei-Cmdlets: Get-ChildItem (list), Set-Location (cd), New-Item, Copy-Item, Move-Item, Remove-Item, Test-Path. Inhalte: Get-Content (-Tail, -TotalCount, -Wait), Set-Content, Add-Content. Encoding immer explizit: -Encoding UTF8. CSV: Import-Csv, Export-Csv. Prozesse: Get-Process, Start-Process, Stop-Process. Properties: WorkingSet (RAM in Byte), CPU (CPU-Sekunden), Id, Name. Services: Get-Service, Start-/Stop-/Restart-Service, Set-Service -StartupType. CIM für Hardware/System-Info: Get-CimInstance Win32_OperatingSystem, Win32_LogicalDisk u.v.m. Datei-Properties: Name, FullName, Length (Bytes), LastWriteTime. Mit Measure-Object -Sum summieren. Vorsicht: -Recurse bei Remove, Encoding-Defaults, eckige Klammern in Pfaden.
