Files
lernbar/content/handouts/P1-powershell-pipeline.md
Florian WildeandClaude Opus 5.5 7d171f149d Inhalte: Wochen 5 bis 8
Vier neue Wochen nach Rahmenplan, im bestehenden Format:

- Woche 5 Ausbildung, Betrieb und Zusammenarbeit (C1, C2, C5)
- Woche 6 IT-Sicherheit und Datenschutz (A6, LF4)
- Woche 7 Skripting mit PowerShell (A10, A4)
- Woche 8 Datensicherung und Speicher (A9)

12 Handouts, 38 Merkkarten, 4 Praxisaufgaben, 2 Checklisten,
2 Lernzielkontrollen, 22 Glossareintraege, zwei neue Themenbloecke.
Jede Berufsbildposition ist jetzt von mindestens einem Inhalt beruehrt.

Die Praxisaufgaben bauen aufeinander auf: Die Abteilungsuebersicht aus
5.1 ist Grundlage der Schutzbedarfsfeststellung in 6.1, und deren
Ergebnis ist Massstab fuer die Sicherungspruefung in 8.1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 21:53:10 +02:00

75 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: P1
titel: PowerShell – Befehle, Pipeline und Objekte
block: programmierung
woche: 7
worum: PowerShell reicht keine Texte weiter, sondern Objekte mit Eigenschaften. Wer das verstanden hat, braucht kein Textschnipseln mehr.
rahmenplan: [A10, B3]
lernfeld: LF5
merksatz: Verb-Substantiv finden, Get-Member fragen, filtern, sortieren, auswählen – formatiert wird erst ganz am Ende.
karten:
- frage: Wie sind die Befehle (Cmdlets) in PowerShell benannt, und wie findet man einen unbekannten Befehl?
antwort: Nach dem Muster Verb-Substantiv, etwa Get-Service oder Stop-Process. Get-Command mit einem Suchbegriff findet Befehle, Get-Help erklärt sie mit Beispielen.
- frage: Was unterscheidet die Pipeline in PowerShell von der in einer klassischen Linux-Shell?
antwort: In PowerShell wandern Objekte mit Eigenschaften durch die Pipeline, nicht Textzeilen. Man filtert nach Eigenschaften wie Status oder Name, statt Spalten aus Text herauszuschneiden.
- frage: Wozu dient Get-Member?
antwort: Es zeigt, welche Eigenschaften und Methoden die Objekte haben, die ein Befehl liefert – also womit man in der Pipeline weiterarbeiten kann.
---
## Das Wesentliche
- **Verb-Substantiv:** `Get-Service`, `Get-Process`, `Get-ChildItem`, `Stop-Service`. Die
Verben sind festgelegt – `Get` liest, `Set` ändert, `New` legt an, `Remove` löscht.
- **Selbst finden statt googeln:** `Get-Command *service*` findet Befehle,
`Get-Help Get-Service -Examples` zeigt Beispiele. Einmal `Update-Help` als Administrator.
- **Objekte statt Text.** `Get-Service` liefert Dienstobjekte mit Eigenschaften wie `Name`,
`Status` und `StartType`. Welche es gibt, verrät `Get-Service | Get-Member`.
- **Die vier Werkzeuge der Pipeline:**
- `Where-Object` filtert: `Where-Object Status -eq 'Stopped'`
- `Sort-Object` sortiert: `Sort-Object Name`
- `Select-Object` wählt Eigenschaften oder Anzahl: `Select-Object Name, Status -First 10`
- `ForEach-Object` tut etwas mit jedem Objekt
- **Vergleiche** heißen `-eq`, `-ne`, `-gt`, `-lt`, `-like` (mit `*` als Platzhalter) und
`-match` (regulärer Ausdruck). Groß- und Kleinschreibung spielt dabei keine Rolle.
- **Ausgeben und weitergeben:** `Export-Csv` schreibt eine Tabelle für Excel,
`Out-File` eine Textdatei. `Format-Table` gehört nur ans Ende – danach sind es keine
verwertbaren Objekte mehr.
- **Erst lesen, dann ändern.** Jeder Befehl, der etwas verändert, kennt `-WhatIf`: Er sagt,
was er tun würde, und tut es nicht.
## Übersicht
```powershell
# Alle beendeten Dienste, die automatisch starten sollten
Get-Service |
Where-Object { $_.Status -eq 'Stopped' -and $_.StartType -eq 'Automatic' } |
Sort-Object Name |
Select-Object Name, DisplayName
# Die fünf Prozesse mit dem höchsten Speicherverbrauch
Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 5 Name, Id, WorkingSet
# Dateien im Downloadordner, älter als 90 Tage, als Tabelle für Excel
Get-ChildItem $HOME\Downloads -File |
Where-Object LastWriteTime -lt (Get-Date).AddDays(-90) |
Select-Object Name, Length, LastWriteTime |
Export-Csv alte-downloads.csv -NoTypeInformation -Encoding UTF8
```
`$_` steht innerhalb der geschweiften Klammern für das Objekt, das gerade durch die Pipeline
kommt.
## Prüfungsfrage
**Frage:** Schreiben Sie eine PowerShell-Befehlszeile, die alle laufenden Dienste
alphabetisch sortiert mit Name und Anzeigename in die Datei `dienste.csv` schreibt, und
erklären Sie jeden Teil.
**Antwort:**
`Get-Service | Where-Object Status -eq 'Running' | Sort-Object Name | Select-Object Name, DisplayName | Export-Csv dienste.csv -NoTypeInformation`
– `Get-Service` liefert alle Dienste als Objekte. `Where-Object` lässt nur die durch, deren
Eigenschaft `Status` den Wert `Running` hat. `Sort-Object Name` sortiert nach dem Namen.
`Select-Object` behält nur die beiden gewünschten Eigenschaften. `Export-Csv` schreibt das
Ergebnis als Tabelle; `-NoTypeInformation` unterdrückt die Typzeile, die ältere
PowerShell-Fassungen sonst an den Anfang setzen.