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

Geschrieben

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

 

Geschrieben

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

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

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...