none
try / catch RRS feed

  • Frage

  • Hallo zusammen,

    ich möchte per try und catch Fehler in meinem Programm abfangen. Dazu mein Beispiel:

     
    $quelle = 'C:\Ablage\PS'
    #$quelle = 'XXXC:\Ablage\PS'
    #$quelle = 'C:\Ablage\PSXXX'
    
    try {
        Get-ChildItem "$($quelle)\*" -Directory
    }
    
    catch {
        write-host "Fehler abgefangen: $_" 
    }
    
    finally {
        write-host "ENDE!!!"
    }


    Bei der ersten Variante, mit einem Pfad der wirklich existiert ($quelle = 'C:\Ablage\PS'), läuft das Programm ohne Fehler durch.

    Bei der zweiten, mit einem Pfad der nicht existiert ($quelle = 'XXXC:\Ablage\PS'), kommt die Fehlermeldung aus dem catch-Zweig, wie erwartet. Der Pfad in der dritten Variante ($quelle = 'C:\Ablage\PSXXX') existiert auch nicht. Der Ausgabebefehl "write-host "Fehler abgefangen: $_", aus dem catch-Zweig, wird aber nicht angesprochen. Ich hätte an der Stelle auch die entsprechende Fehlermeldung erwartet. Hat jemand dazu einen Hinweis für mich?

     Danke.

     Gruß.

     ottto

    Dienstag, 11. Februar 2020 14:16

Antworten

  • Hallo,

    also der erste Pfad ist vorhanden, der zweite ist ein von der Syntax her ungültiger Pfad und der dritte ist ein gültiger aber nicht vorhandener Pfad.

    Ergänze den Get-ChildItem um den Parameter -ErrorAction Stop , dann wird auch das dritte Beispiel zu einem Stop-Error und Try/Catch greift.

    Beste Gruesse
    brima

    Dienstag, 11. Februar 2020 15:11

Alle Antworten

  • Hallo,

    also der erste Pfad ist vorhanden, der zweite ist ein von der Syntax her ungültiger Pfad und der dritte ist ein gültiger aber nicht vorhandener Pfad.

    Ergänze den Get-ChildItem um den Parameter -ErrorAction Stop , dann wird auch das dritte Beispiel zu einem Stop-Error und Try/Catch greift.

    Beste Gruesse
    brima

    Dienstag, 11. Februar 2020 15:11
  • Funktioniert!

    Gibt es eine Möglichkeit für alle Befehle unter "try" (die auf Pfade zugreifen) das allgemein mitzugeben?

    Danke.

    Gruß.

    ottto

    Dienstag, 11. Februar 2020 15:47
  • Get-Help about_Preference_Variables

    ... bitte komplett inklusive Beispiele lesen!  ;-)


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    • Bearbeitet BOfH-666 Dienstag, 11. Februar 2020 15:54
    Dienstag, 11. Februar 2020 15:53
  • Super Link!

    Funktioniert wie gewünscht.

     
    $quelle = 'C:\Ablage\PSXXX'
    $ErrorActionPreference = "Stop"
    
    try {
        Get-ChildItem "$($quelle)\*" -Directory
        #Write-Error "Fehler"
        Write-Host "TEXT sollte nicht ausgegeben werden"
    }
    
    catch {
        write-host "Fehler abgefangen: $_" 
    }
    
    finally {
        write-host "ENDE!!!"
    }
    Der try-Block wird beim Fehler verlassen und die catch-Anweisung wird ausgeführt.

    Danke.

    Gruß.

    ottto

    Mittwoch, 12. Februar 2020 09:17
  • Super Link!

    Funktioniert wie gewünscht.

    Aber aufpassen bitte!! Fehler, die außerhalb des try/catch-Blocks auftreten und normalerweise die Scriptausführung nicht unterbrechen würden, verursachen mit dieser Einstellung einen unbehandelten Fehler. Das soltlest Du im Hinterkopf behalten.

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Mittwoch, 12. Februar 2020 09:32