Einen PowerShell Yes No Prompt – geht das? Wenn du Skripte schreibst, die wichtige Änderungen am System durchführen, solltest du vorher eine eindeutige Bestätigung einholen. Genau dafür eignet sich ein PowerShell Yes No Prompt.
In dieser Anleitung zeige ich dir verschiedene Methoden, wie du eine Ja/Nein-Abfrage in PowerShell erstellst – von einfach bis professionell.
Warum ein PowerShell Yes No Prompt wichtig ist
PowerShell-Skripte automatisieren viele administrative Aufgaben. Damit kannst du als Administrator deinen Alltag viel produktiver und effektiver gestalten. Manche von den Automatisierungen, sind allerdings kritisch. Genau hier ist eine vorherige Abfrage sinnvoll.
Hierzu gehören u. a. folgende:
- Dateien löschen
- Benutzeraccounts ändern
- Registry-Einträge anpassen
- Dienste neu starten
Ein Yes No Prompt schützt dich davor, versehentlich Operationen auszuführen, die du nicht wolltest.
Die einfachste Methode: Read-Host
Die simpelste Variante eines PowerShell Yes No Prompt ist die Eingabe über Read-Host. Dieses Cmdlet ermöglicht es dir, Benutzereingaben während der Ausführung eines Skripts zu erfassen.
Es kann verwendet werden, um Eingaben wie Text oder Passwörter zu erhalten, wobei die Option -AsSecureString für sensible Daten zur Verfügung steht.
Die Eingaben werden als Strings zurückgegeben, die dann in Variablen gespeichert und weiterverarbeitet werden können.
$answer = Read-Host "Möchtest du fortfahren? (Y/N)"
if ($answer -eq "Y") {
Write-Host "Vorgang wird ausgeführt..."
} else {
Write-Host "Abgebrochen."
}
Vorteile:
- Schnell geschrieben
- In jeder PowerShell-Version verfügbar
Nachteile:
- Eingabe ist frei – Nutzer könnten „ja“, „y“, „1“ oder etwas eingeben
- Du musst viel selbst validieren
Für kleine Skripte okay, für produktive Umgebung eher nicht geeignet.
Benutzerfreundlicher: String-Vergleich mit Validierung
Mit einer einfachen Schleife verhinderst du falsche Eingaben. Im Folgenden wird hier die Do-Schleife verwendet. Diese ermöglicht dir, einen Block von Befehlen mindestens einmal auszuführen und dann zu wiederholen, solange eine bestimmte Bedingung erfüllt ist. Anschließend erfolgt noch eine If-Abfrage.
do {
$answer = Read-Host "Fortfahren? (Y/N)"
} until ($answer -match '^[YyNn]$')
if ($answer -match '^[Yy]$') {
Write-Host "Weiter geht's!"
} else {
Write-Host "Abgebrochen."
}

Der Prompt akzeptiert jetzt nur Y oder N, egal ob groß oder klein. Dabei werden reguläre Expressions verwendet, um alle Benutzereingaben abzufangen.
Die (etwas) einfachere .NET-Lösung: Das Confirm Parameter
Wenn eine einfache Ja/Nein-Abfrage für kritische Operationen gewünscht ist, ist das in vielen Cmdlets native -Confirm-Parameter oft die beste Wahl.
Wenn jedoch ein benutzerdefinierter Dialog unbedingt über .NET sein soll, kann man den Add-Type–Schrittoft umgehen.
Eine elegantere, native Option, die eine MessageBox simuliert, ist das Confirm Parameter, da es die Skript-Struktur sauberer hält und viele Cmdlets es bereits unterstützen.
# Beispiel: native PowerShell-Bestätigung für Cmdlets (Clean Code)
# Wenn der Benutzer 'Y' (Ja) wählt, wird Remove-Item ausgeführt.
Remove-Item "C:\temp\datei.log" -Confirm -Force -WhatIf:$false
# Wenn man dennoch eine MessageBox nutzen will, kann man den Add-Type weglassen
# (funktioniert meist unter Windows PowerShell/PowerShell 7 unter Windows,
# da die Assembly oft automatisch geladen wird), aber es bleibt eine Non-Cross-Platform-Lösung.
$result = [System.Windows.Forms.MessageBox]::Show(
"Möchtest du den Vorgang starten?",
"Bestätigung",
[System.Windows.Forms.MessageBoxButtons]::YesNo,
[System.Windows.Forms.MessageBoxIcon]::Question
)
if ($result -eq [System.Windows.Forms.DialogResult]::Yes) {
Write-Host "Vorgang wird ausgeführt..."
} else {
Write-Host "Abgebrochen."
}
Modern und elegant: ChoiceDescription & PromptForChoice
Für produktive PowerShell-Skripte empfehle ich dir die Best-Practice-Variante: PromptForChoice.
$caption = "Bestätigung benötigt"
$message = "Möchtest du den Vorgang jetzt ausführen?"
# Hier wurde der Accelerator '&' eingefügt, um die Auswahl per Tastatur zu ermöglichen.
$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Ja", "Führt den Vorgang aus."
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&Nein", "Bricht den Vorgang ab."
$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)
# Standardauswahl auf '1' setzen, was dem Index von 'Nein' entspricht.
# Für kritische Skripte ist 'Nein' als Standard oft sicherer (Fail-Safe).
$choice = $host.UI.PromptForChoice($caption, $message, $options, 1)
# $choice == 0 (erste Option: Ja); $choice == 1 (zweite Option: Nein)
if ($choice -eq 0) {
Write-Host "Vorgang wird gestartet..."
} else {
Write-Host "Abbruch durch Benutzer. Die Standardwahl war Nein (Index 1)."
}

Vorteile:
- native PowerShell-Funktion
- Zwangsauswahl – keine falsche Eingabe möglich
- funktioniert auf allen Plattformen
- eignet sich perfekt für Skripte, die du verteilst
Warum dies häufig die beste Wahl ist
Nutzer können nicht etwas Unbekanntes eintippen. Sie müssen eine klare Auswahl treffen – und du erhältst immer ein verlässliches Ergebnis.
Wann solltest du welchen PowerShell Yes No Prompt verwenden?
| Methode | Einsatzgebiet |
|---|---|
| Read-Host (einfach) | schnelle Tests, kleine Skripte |
| Read-Host mit Validierung | Skripte ohne GUI, aber mit sauberer Abfrage |
| .NET MessageBox | Wenn eine grafische Oberfläche unter Windows (Desktop-Umgebung) erwünscht ist. |
| PromptForChoice | produktive Skripte, sichere Abfragen, Cross-Platform (Windows, Linux, macOS) |
Wenn du Skripte für IT-Admins, Schulen oder Firmen verteilst, solltest du immer PromptForChoice verwenden. So behältst du Kontrolle und Verlässlichkeit.
Praxisbeispiel: Sicheres Löschen von Dateien
Hier siehst du, wie du einen PowerShell Yes No Prompt einsetzt, bevor du Dateien löschst: Damit bist du vor versehentlichem Löschen zuverlässig geschützt.
$caption = "Achtung!"
$message = "Sollen die Log-Dateien im Ordner C:\Logs gelöscht werden?"
$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Ja"
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&Nein"
$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)
$choice = $host.UI.PromptForChoice($caption, $message, $options, 1)
if ($choice -eq 0) {
Remove-Item "C:\Logs\*" -Force
Write-Host "Dateien wurden gelöscht."
} else {
Write-Host "Vorgang abgebrochen."
}

Fazit
Ein PowerShell Yes No Prompt ist ein essenzielles Werkzeug, wenn du Skripte sicherer und professioneller machen willst.
Während Read-Host für kleine Skripte reicht, solltest du für produktive Umgebungen immer auf PromptForChoice setzen. Es ist zuverlässig, plattformübergreifend und verhindert falsche Eingaben.
Wenn du deine PowerShell-Skripte sauber und benutzerfreundlich gestalten willst, gehört ein guter Yes-No-Prompt einfach dazu.






