Was hilft ist, den Fehlerausgabestrom in die Standardausgabe umzuleiten und den Fehler von hier aus abzufangen: $Fehlermeldung = Send-Mailmessage -SmtpServer -Subject 'Warnung' -Body 'Hier kommt die Maus' -From Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein! PowerShell => Fehlerbehandlung. ' -to Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein! ' 2>&1 If ( $Fehlermeldung) { $ssage} Dieser Ansatz sollte so auch bei anderen Cmdlet funktionieren, die die Fehlermeldung nicht sauber zurückgeben. Weiterführende Links
#2 Hi. Das Ganze ist einfacher als du denkst. C++: if (cin >> radius && radius > 0) { // Eingabe OK... } else { // Eingabe war kein double oder es trat EOF auf, oder der eingelesene Wert war nicht größer 0. cerr << "Sie müssen eine gültige positive rationale Zahl eingeben! " << endl; ();} Zur Erklärung: Du solltest immer gleich beim Einlesen überprüfen ob das Einlesen erfolgreich war. Dazu ist es meist günstig das Einlesen selbst gleich in einer Bedingung zu machen. Powershell fehler abfangen mount. So wie du es vorher gemacht hast, ist es problematisch weil du da nicht kontrollierst ob überhaupt etwas eingelesen wurde oder nicht - und somit rechnest du einfach mit einem alten Wert von radius weiter. Gruß #5 Pixtar hat gesagt. : Das mit der "leeren" Eingabe ist ja klaro, das hatte ich nun garnicht bedacht, auch das die Variable nach einer falschen Eingabe wieder geleert wird ( ()) Das () bedeutet nur, das der Streamzustand wieder zurückgesetzt wird, wobei es eine gute Idee wäre, das nur zu tun wenn cin noch nicht am EOF ist und danach von der Eingabe eine komplette Zeile zu lesen (um den Eingabepuffer zu leeren).
Auch andere Optionen sind für das Error Handling in PowerShell verfügbar. Mit diesen Optionen könnt ihr Fehler behandeln: SilentlyContinue Der Fehler wird unterdrückt und PowerShell führt den Code weiter aus. Ignore Der Fehler wird komplett ignoriert und wird auch nicht in den Error Stream geschrieben. Continue Continue ist der Standard-Wert. PowerShell gibt den Fehler in roter Schrift aus, arbeitet allerdings den Code weiterhin ab. Stop Bei Stop wird (gleich einem terminierenden Fehler) das Script komplett abgebrchen. Inquire Inquire ist sehr selten. Hier wird bei jedem Fehler gefragt, ob mit der Abarbeitung fortgefahren werden soll. Try Catch Finally verwenden Entwickler kennen das Try-Catch-Finally definitiv in der Anwendungsentwicklung. Acl - Können PowerShell-trap Fehler in GetChildItem und weiter looping?. Diese Art von Fehler behandeln ist aber auch in der Scriptsprache PowerShell möglich und wird gerne eingesetzt. Vor allem bei terminierenden Fehlern, welche mit ErrorAction und ErrorActionPreference nicht abgefangen werden können nutzt man gerne Try Catch.