Ich versuche, mit Skript-Blöcken in einer Bibliotheksfunktion zu arbeiten. Ich möchte sicher sein, dass ich Laufzeitfehler im gelieferten Skriptblock zuverlässig erkennen und melden kann. Im folgenden Beispiel erstelle ich einen Skriptblock, der einen Laufzeitfehler verursacht.Wie kann ich eine Ausnahme im Skriptblock abfangen?
Meine Erwartung ist, dass der catch-Block es erfassen und die Fehlermeldung ausgeben wird. Das passiert nicht. Der Fehler wird in roter Schrift an die Konsole ausgegeben, aber die Kontrolle wird nicht an den catch-Block übergeben.
$cmd = [ScriptBlock]::Create("Get-Content doesnotexist.txt")
$results = ''
try {
$results = & $cmd
}
catch {
$results += "Error: $($_.Exception.Message)"
}
"Results: $results"
Results:
PS:>
Kann mir bitte jemand helfen, den Fehler in diesem Beispiel zu finden?
versuchen fangen nur behandelt __termining errors__. '$ cmd = [ScriptBlock] :: Create (" Holen-Inhalt doesnotexist.txt -ErrorAction Stop ") – Matt
Siehe http://stackoverflow.com/questions/9948517/how-to-stop-a-powershell-script -on-the-first-error und diese http://stackoverflow.com/questions/13820140/how-can-i-rethrow-an-exception-from-catch-block-in-powershell –
@MartinMaat Die Beiträge, die Sie referenziert haben enthielt die Informationen, die ich brauchte. Die Standardfehleraktion von continue ist der Grund dafür, dass mein try catch umgangen wurde. Wenn ich es zu Stop ändere, funktioniert es so, wie ich es erwarte. –