Jump to content

Powershell: Try/catch exe


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

ich habe mir gerade mein erstes Powershell skript zusammengebaut und komme nicht weiter:

Das Skript ruft unter anderem ein externes Programm auf. Falls irgendetwas während der Skriptausführung schiefgeht, möchte ich eine Mail mit dem Fehler versenden:

$ErrorActionPreference = "Stop"
try
{
Tu_dies_und_das
&C:\Programme\ghostscript.exe -q -dNOPAUSE -dBATCH ...
}
catch
{
sendmail panic@fabrikam.com body=$error[0]
}

Das hab ich in der ISE gemacht und da funktioniert alles wie gewünscht. Verfälsche ich einen Parameter im ghostscript Aufruf bekomme ich im Mailbody die Fehlermeldung geliefert, die Ghostscript.exe ausgibt, z.B.

GPL Ghostscript 9.16: **** Could not open the file D:\test.pdf.

 

Dann habe ich das Ganze in den Taskplaner gepackt, weil das Skript regelmässig laufen soll. Provoziere ich einen Fehler in Tu_dies_und_das, bekomme ich immer noch eine Mail. Wenn aber Ghostscript auf einen Fehler läuft, bekomme ich nichts.

Im Taskplaner steht: powershell -noprofile -file D:\MeinErstesSkript.ps1

 

Nach langer Suche habe ich nur gefunden, dass das gar nicht funktionieren dürfte (auch nicht in der ISE?), weil ich Fehler von externen Programmen mit Try/Catch gar nicht erwischen kann. Also flugs mein Skript modifiziert:

Tu_dies_und_das
&C:\Programme\ghostscript.exe -q -dNOPAUSE -dBATCH ...
if ($LastExitCode -ne 0)
  { throw $error[0] }
}
catch...



Jetzt bekomme ich auch bei Ghostscript Fehlern eine Mail, aber als Fehlertext gibt es nur: ScriptHalted

Gibt es nicht doch eine Möglichkeit, den Ghostscript Fehlertext in meine Mail zu bekommen?

 

Lieben Dank

Frank

 

Link zu diesem Kommentar

Super, der Link hat weitergeholfen!

Endergebnis ist somit:

$ErrorActionPreference = "Stop"
try
{
Tu_dies_und_das
$GSerr= (&C:\Programme\ghostscript.exe -q -dNOPAUSE -dBATCH "-sOutputFile=$TIFfile" $PDFfile) | Out-String
if ($LastExitCode -ne 0)
   { throw $GSerr }
}
catch
{
sendmail panic@fabrikam.com body=$error[0]
}

Tausend Dank für Deine Hilfe!

Frank

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...