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>
75 lines
4.0 KiB
Markdown
75 lines
4.0 KiB
Markdown
---
|
||
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.
|