id: woche-07 woche: 7 titel: Lernzielkontrolle Woche 7 – Skripting mit PowerShell dauer_minuten: 45 hinweis: >- Offene Fragen. Bei Code zählt, dass er funktionieren würde – Schreibweise von Groß- und Kleinbuchstaben und kleine Tippfehler werden nicht abgezogen. fragen: - id: f1 frage: >- Erklären Sie, was in der PowerShell-Pipeline von Befehl zu Befehl weitergereicht wird, und welchen Vorteil das gegenüber einer Shell hat, die Text weiterreicht. punkte: 5 musterloesung: >- Weitergereicht werden Objekte mit Eigenschaften und Methoden, keine Textzeilen. Der nächste Befehl kann direkt auf Eigenschaften wie Status, Name oder Größe zugreifen, nach ihnen filtern und sortieren. Bei einer Textshell müsste man die gewünschte Angabe erst aus der Zeile herausschneiden; ändert sich das Ausgabeformat, bricht das Skript. (Objekte 2 P., Vorteil mit Begründung 3 P.) - id: f2 frage: >- Schreiben Sie eine Befehlszeile, die die zehn größten Dateien im Ordner D:\Daten (ohne Unterordner) mit Name und Größe anzeigt, die größte zuerst. punkte: 6 musterloesung: >- Get-ChildItem D:\Daten -File | Sort-Object Length -Descending | Select-Object -First 10 Name, Length. Bewertung: Dateien des Ordners abrufen (2 P.), absteigend nach Length sortieren (2 P.), auf zehn begrenzen und die Eigenschaften auswählen (2 P.). Der Schalter -File ist wünschenswert, aber nicht gefordert. - id: f3 frage: >- Was gibt das folgende Skript aus? Begründen Sie. $liste = @(3, 8, 12, 5); $treffer = 0; foreach ($zahl in $liste) { if ($zahl -gt 4) { $treffer++ } }; $treffer punkte: 4 musterloesung: >- Ausgabe: 3. Die Schleife geht alle vier Zahlen durch; die Bedingung ist bei 8, 12 und 5 erfüllt, nicht bei 3. Bei jedem Treffer wird der Zähler um eins erhöht. (Ergebnis 2 P., Begründung 2 P.) - id: f4 frage: >- Erklären Sie den Unterschied zwischen -eq, -like und -match an je einem Beispiel. punkte: 6 musterloesung: >- -eq vergleicht auf Gleichheit: 'PC-001' -eq 'pc-001' ist wahr, weil Groß- und Kleinschreibung keine Rolle spielt. -like vergleicht mit Platzhaltern: 'PC-001' -like 'PC-*' ist wahr. -match prüft gegen einen regulären Ausdruck: 'PC-001' -match '^PC-\d{3}$' ist wahr, weil auf "PC-" genau drei Ziffern folgen. (Je Operator mit Beispiel 2 P.) - id: f5 frage: >- Ein Skript soll alte Benutzerprofile löschen. Was tun Sie, bevor Sie es auf allen Rechnern ausführen? Nennen Sie drei Schritte. punkte: 6 musterloesung: >- (1) Mit -WhatIf laufen lassen und prüfen, welche Profile betroffen wären. (2) Zuerst an einem Testrechner, dann an einem einzelnen echten Rechner ausführen und das Ergebnis kontrollieren. (3) Sicherstellen, dass eine aktuelle Sicherung der betroffenen Daten vorliegt. Ebenfalls richtig: Änderung ankündigen bzw. als Änderungsanfrage freigeben lassen, Protokoll der gelöschten Profile schreiben, Ausschlussliste für Dienst- und Administratorkonten einbauen. (Je Schritt 2 P.) - id: f6 frage: >- Im folgenden Ausschnitt wird ein Fehler beim Kopieren nicht vom catch-Block aufgefangen. Warum, und wie beheben Sie das? try { Copy-Item \\server\vorlagen\*.docx C:\Vorlagen } catch { Write-Warning 'Kopieren fehlgeschlagen' } punkte: 5 musterloesung: >- Copy-Item meldet die meisten Fehler als nicht abbrechende Fehler: Er gibt eine Fehlermeldung aus und läuft weiter, der catch-Block wird nicht erreicht. Abhilfe: -ErrorAction Stop an den Befehl anhängen, dann wird der Fehler zu einem abbrechenden Fehler und vom catch-Block aufgefangen. (Ursache 3 P., Behebung 2 P.)