Files
lernbar/content/handouts/P2-variablen-bedingungen-schleifen.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

82 lines
3.6 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: P2
titel: Variablen, Bedingungen und Schleifen
block: programmierung
woche: 7
worum: Drei Bausteine reichen für fast jedes Verwaltungsskript – sich etwas merken, eine Entscheidung treffen, etwas wiederholen.
rahmenplan: [A10, A4]
lernfeld: LF5
merksatz: Merken mit $, entscheiden mit if, wiederholen mit foreach. Der Rest ist Übung.
karten:
- frage: Was ist der Unterschied zwischen "Hallo $name" und 'Hallo $name' in PowerShell?
antwort: In doppelten Anführungszeichen wird die Variable durch ihren Wert ersetzt, also etwa „Hallo Anna". In einfachen Anführungszeichen bleibt der Text genau so stehen, wie er geschrieben ist.
- frage: Was gibt dieses Skript aus – $summe = 0; foreach ($z in 1..5) { if ($z % 2 -eq 0) { $summe += $z } }; $summe
antwort: 6. Die Schleife läuft über 1 bis 5, die Bedingung lässt nur gerade Zahlen durch (Rest bei Division durch 2 ist 0), also werden 2 und 4 addiert.
- frage: Wann nimmt man foreach als Schleife und wann ForEach-Object?
antwort: foreach für eine Liste, die schon in einer Variablen liegt – übersichtlich und schnell. ForEach-Object mitten in einer Pipeline, wenn die Objekte direkt aus einem Befehl kommen.
---
## Das Wesentliche
- **Variablen** beginnen mit `$`: `$pfad = 'D:\Daten'`. Sie können alles aufnehmen – Text,
Zahlen, Listen, ganze Objekte aus einem Befehl: `$dienste = Get-Service`.
- **Text:** In `"…"` werden Variablen eingesetzt, in `'…'` nicht. Für Eigenschaften im Text:
`"Freier Platz: $($laufwerk.FreeSpace)"`.
- **Listen** entstehen mit `@('PC-001', 'PC-002')` oder als Bereich `1..10`. Das erste Element
ist `$liste[0]`, die Anzahl `$liste.Count`.
- **Eigene Objekte** für Berichte: `[PSCustomObject]@{ Name = $n; Status = $s }`. Daraus
wird mit `Export-Csv` eine saubere Tabelle.
- **Bedingungen:** `if (…) { … } elseif (…) { … } else { … }`. In der Klammer steht ein
Vergleich mit `-eq`, `-gt`, `-like` usw. – **nicht** mit `=`, das ist eine Zuweisung.
- **Verknüpfen** mit `-and`, `-or`, `-not`.
- **Schleifen:** `foreach ($pc in $rechner) { … }` geht jedes Element durch.
`while (…) { … }` läuft, solange die Bedingung gilt – und braucht deshalb etwas, das sie
irgendwann falsch werden lässt.
- **Rechnen:** `+ - * /` und `%` für den Rest einer Division. `1GB` ist für PowerShell eine
Zahl, `$bytes / 1GB` rechnet also direkt in Gigabyte um.
## Übersicht
```powershell
$grenze = 15 # Prozent freier Platz, ab dem gewarnt wird
$laufwerke = Get-CimInstance -ClassName Win32_LogicalDisk -Filter 'DriveType = 3'
foreach ($lw in $laufwerke) {
$frei = [math]::Round($lw.FreeSpace / $lw.Size * 100, 1)
if ($frei -lt $grenze) {
Write-Warning "$($lw.DeviceID) hat nur noch $frei % frei."
}
else {
Write-Output "$($lw.DeviceID): $frei % frei – in Ordnung."
}
}
```
`DriveType = 3` sind lokale Festplatten; USB-Sticks (2) und Netzlaufwerke (4) bleiben außen vor.
## Prüfungsfrage
**Frage:** Schreiben Sie ein kurzes PowerShell-Skript, das für eine Liste von drei
Rechnernamen prüft, ob sie per Ping erreichbar sind, und für jeden Rechner „erreichbar" oder
„nicht erreichbar" ausgibt.
**Antwort:**
```powershell
$rechner = @('PC-001', 'PC-002', 'PC-003')
foreach ($pc in $rechner) {
if (Test-Connection -ComputerName $pc -Count 1 -Quiet) {
Write-Output "$pc erreichbar"
}
else {
Write-Output "$pc nicht erreichbar"
}
}
```
Die Liste wird in einer Variablen gehalten, `foreach` geht jeden Namen durch.
`Test-Connection -Quiet` liefert statt einer ausführlichen Ausgabe nur wahr oder falsch,
was die `if`-Bedingung direkt auswertet.