PowerShell Yes No Prompt – So fragst du Benutzer sicher und sauber ab

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."
}
PowerShell Yes No Prompt – So fragst du Benutzer sicher und sauber ab
PowerShell Yes No Prompt – So fragst du Benutzer sicher und sauber ab

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)."
}
PowerShell Yes No Prompt – So fragst du Benutzer sicher und sauber ab
PowerShell Yes No Prompt – So fragst du Benutzer sicher und sauber ab

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."
}
2025 11 26 16 38 53 scaled

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.

Der Blogbetreiber und Autor: Markus Elsberger

Über den Autor

Mein Name ist Markus Elsberger und ich beschäftige mich mit der Administration von Windows und Linux-Systemen sowie mit diversen Themen bzgl. Netzwerktechnik. In meiner Lehrtätigkeit erstelle ich verschiedene Szenarien und teste auch verschiedene Konfigurationen, welche ich in diesem Blog festhalten möchte. -> Gern kannst du mich mit einem Kaffee unterstützen!


Kostenlose Befehlsreferenzen und E-Books
(Netzwerkanalyse, Benutzerverwaltung, Festplattenkonfiguration, u. v. m.)


Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Kostenlose E-Books für die IT-Administration

Steigere deine IT-Kompetenzen

Ebook - 10 Schritte nach der Windows Installation
Close the CTA

Windows 11, Windows Server, Docker, PowerShell Referenzen, Batch, Linux Terminal, 

u.v.m.