Halluzinationen und Validierung
Lernziele
- Erfundene Cmdlets, Parameter und Module erkennen
- KI-Ausgaben mit
Get-Command,Get-Help,-WhatIfund Testumgebung überprüfen
Sprachmodelle erzeugen plausibel klingenden Text, keine geprüfte Wahrheit. Bei PowerShell zeigt sich das so:
- Erfundene Cmdlets:
Get-ADUserLastLogonklingt perfekt und existiert nicht. - Erfundene Parameter:
Get-ChildItem -OlderThan 30dgibt es nicht. - Falsche Version:
Get-WmiObjectundGet-Service -ComputerNamestammen aus Windows PowerShell 5.1. - Veraltete Praxis:
-NoTypeInformation,Register-ScheduledJob, Klartextpasswörter. - Halbes Wissen: Das Cmdlet gibt es, aber es tut etwas anderes.
Die Prüfliste
Abschnitt betitelt „Die Prüfliste“Für jedes Cmdlet in einer KI-Antwort:
| Frage | Befehl |
|---|---|
| Gibt es das Cmdlet? | Get-Command Get-ADUserLastLogon |
| Aus welchem Modul stammt es? | Get-Command Get-ADUser | Select-Object Source, Version |
| Gibt es den Parameter? | Get-Help Get-ChildItem -Parameter OlderThan |
| Was macht das Cmdlet wirklich? | Get-Help Get-ChildItem -Examples |
| Was liefert es zurück? | … | Get-Member |
| Ist es für meine PowerShell-Version gedacht? | $PSVersionTable, Hilfeseite auf learn.microsoft.com |
| Was passiert, wenn ich es ausführe? | -WhatIf, Testumgebung, Teilstück einzeln ausführen |
Get-Command Get-ADUserLastLogon # Fehler: Cmdlet nicht gefunden = erfundenGet-Command -Module ActiveDirectory -Verb Get -Noun *User*Auch die Realität prüfen
Abschnitt betitelt „Auch die Realität prüfen“Ein Skript kann syntaktisch richtig sein und trotzdem das Falsche tun:
- Teste mit Beispieldaten in einer Testumgebung (dein Lab), nie zuerst in Produktion.
- Nutze
-WhatIfbei allem, was verändert. - Vergleiche das Ergebnis mit einer unabhängigen Abfrage (zum Beispiel Anzahl der Benutzer in der GUI).
- Lies den Code, bevor du ihn ausführst. Du bist verantwortlich.