{"id":162,"date":"2014-03-02T21:06:05","date_gmt":"2014-03-02T20:06:05","guid":{"rendered":"http:\/\/www.pachlina.net\/stefan\/?p=162"},"modified":"2016-08-01T21:07:00","modified_gmt":"2016-08-01T19:07:00","slug":"scheduled-task-batch-und-0x1","status":"publish","type":"post","link":"https:\/\/www.pachlina.net\/stefan\/2014\/03\/02\/scheduled-task-batch-und-0x1\/","title":{"rendered":"Scheduled Task Batch und 0x1"},"content":{"rendered":"<p>Der Scheduler von Windows meldet bei einem fehlerhaften Lauf eines Tasks entsprechend einen Fehler ins Event-Log.Doch wenn ein Batch ( cmd oder bat ) einen Errorcode ausl\u00f6st, dann wird dies nur mit dem letzten Status angezeigt. zB 0x1 oder 0x2 etc.<\/p>\n<p>Wie kann man dies nun monitoren ? Wie \u00fcberwachen, sodass man zB eine Info per eMail oder gar ein Ticket er\u00f6ffnet wird ?<\/p>\n<p>Ich habe mir diese Frage gestellt, da ich auf einem Windows Server das OTRS Ticket-System laufen habe, und OTRS einige Jobs ben\u00f6tigt, um richtig zu funktionieren. &#8230;. und wozu hat man den Windows-Scheduler ? \ud83d\ude09<\/p>\n<p>Ich schrieb kurzerhand ein Power-Shell Script, welches die Scheduled Tasks von OTRS \u00fcberwacht.<\/p>\n<p>Zu Beginn die Parameter die angepa\u00dft werden m\u00fcssen, wie eMail-Adressen etc.<br \/>\nDas Script ist so aufgebaut, dass es innerhalb des Pfades des Windows Schedulers ( Variable $TaskFolder ) die hinterlegten Tasks abfr\u00e4gt.<br \/>\nDa ein OTRS-Task zust\u00e4ndig ist, die eMails zu \u00fcbermitteln, hat es nur wenig Sinn, die selbe eMail-Adresse zu verwenden, wie auch das Ticket-System &#8211; zB. <span id=\"cloak48367\"><a href=\"mailto:support@blabla.at\">support@blabla.at<\/a><\/span> (<em> wenn man die eMail-Alerts an das Ticket-System \u00fcbermitteln will, was ja wiederum Sinn macht<\/em> ).<br \/>\nDahingehend gibt es f\u00fcr diesen Fall weitere eMail-Adressen ( Variable [string[]]$eMailTo2 &#8230;. <em>ja muss ein Array sein, da der send-mailmessage sonst nicht mit den Adressen umgehen kann.<\/em> )<br \/>\nSomit ist die Variable $eMailTask entsprechend zu benennen, damit die alternativen eMail-Adressen verwendet werden, falls dieser Task ein Problem hat.<\/p>\n<hr \/>\n<p># Script-Name: check_scheduler.ps1<br \/>\n# Erstellt am: 27.02.2014<br \/>\n# Author: Stefan Pachlina<br \/>\n# Version: 1.1<br \/>\n#<br \/>\n# Mit diesem Script wird \u00fcberpr\u00fcft, ob ein Scheduled-Task von OTRS den R\u00fcckgabewert ungleich 0 enth\u00e4lt<br \/>\n# Wenn ja, wird ein eMail ausgel\u00f6st.<br \/>\n# &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/p>\n<p># Start: Anzupassende Parameter<br \/>\n# &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n# Task Scheduler Sub-Ordner, in dem sich die Tasks befinden<br \/>\n$TaskFolder\u00a0\u00a0 = &#8222;OTRS&#8220;<br \/>\n# eMail Absenderadresse<br \/>\n$eMailFrom\u00a0\u00a0\u00a0 = &#8222;<span id=\"cloak94469\"><a href=\"mailto:adresse@domain.at\">adresse@domain.at<\/a><\/span> &#8220;<br \/>\n# eMail Empf\u00e4ngeradresse<br \/>\n$eMailTo\u00a0\u00a0\u00a0\u00a0\u00a0 = &#8222;<a href=\"mailto:adresse@domain.at\">adresse@domain.at<\/a><a href=\"mailto:adresse@domain\"> &#8220;<br \/>\n# eMail Empf\u00e4ngeradresse(n) f\u00fcr den Fall, wenn der OTRS-eMail-Task nicht l\u00e4uft,<br \/>\n# und die Adresse unter $eMailTo ans Ticket-System meldet<br \/>\n[string[]]$eMailTo2\u00a0\u00a0\u00a0\u00a0 = &#8222;Vorname Nachname &lt;<span id=\"cloak35681\"><\/span><\/a><a href=\"mailto:adresse@domain.at%3E\">adresse@domain.at&gt;<\/a><a href=\"mailto:adresse@domain\"> &#8222;, &#8222;Vorname Nachname &lt;<span id=\"cloak99186\"><a href=\"mailto:adresse@domain.at\">adresse@domain.at<\/a><\/span> <span id=\"cloak88768\"><a href=\"mailto:georg.hetzendorfer@klinger.kfc.at%3E\">&gt;<\/a><\/span> &#8220;<br \/>\n# Mail-Server<br \/>\n$smtpserver\u00a0\u00a0 = &#8222;servername.domain.at&#8220;<br \/>\n# Name des Scheduled Tasks, welcher die eMails an OTRS \u00fcbermittelt<br \/>\n$eMailTask\u00a0\u00a0\u00a0 = &#8222;check eMails&#8220;<br \/>\n# &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n# End: Anzupassende Parameter<\/p>\n<p>$Foldertocheck = $TaskFolder + &#8222;\\&#8220;<br \/>\n$checkString\u00a0 = schtasks \/query \/FO LIST \/V \/TN $Foldertocheck | findstr &#8222;TaskName&#8220;<br \/>\n$Tasks = $checkString<\/p>\n<p>foreach ($TaskName in $Tasks) {<br \/>\n$checkTaskname = $TaskName.TrimStart(&#8222;TaskName:&#8220;).Trim()<br \/>\n$checkString\u00a0 = schtasks \/query \/FO LIST \/V \/TN $checkTaskname | findstr &#8222;Result&#8220;<\/p>\n<p>if ($checkString -notmatch &#8222;0&#8220;) {<br \/>\n$eMailSubject = &#8222;Task failed: &#8220; + $checkTaskname<\/p>\n<p># Aufbereitung des eMail-Textes<br \/>\n$det1 = schtasks \/query \/FO LIST \/V \/TN $checkTaskname | findstr \/c:&#8220;HostName&#8220;<br \/>\n$det2 = schtasks \/query \/FO LIST \/V \/TN $checkTaskname | findstr \/c:&#8220;Folder&#8220;<br \/>\n$det3 = schtasks \/query \/FO LIST \/V \/TN $checkTaskname | findstr \/c:&#8220;TaskName&#8220;<br \/>\n$det4 = schtasks \/query \/FO LIST \/V \/TN $checkTaskname | findstr \/c:&#8220;Next Run Time&#8220;<br \/>\n$det5 = schtasks \/query \/FO LIST \/V \/TN $checkTaskname | findstr \/c:&#8220;Last Run Time&#8220;<br \/>\n$det6 = schtasks \/query \/FO LIST \/V \/TN $checkTaskname | findstr \/c:&#8220;Last Result&#8220;<br \/>\n$det7 = schtasks \/query \/FO LIST \/V \/TN $checkTaskname | findstr \/c:&#8220;Task To Run&#8220;<br \/>\n$det8 = schtasks \/query \/FO LIST \/V \/TN $checkTaskname | findstr \/c:&#8220;Run As User&#8220;<br \/>\n$det9 = schtasks \/query \/FO LIST \/V \/TN $checkTaskname | findstr \/c:&#8220;Schedule Type&#8220;<\/p>\n<p>$eMailBody = &#8222;Ein scheduled Task schlug fehl !&lt;br&gt;&lt;br&gt;&lt;b&gt;Error details:&lt;\/b&gt;&lt;br&gt;&lt;br&gt;&lt;font size=3&gt;&#8220;<br \/>\n$eMailBody = $eMailBody + $det1 + &#8222;&lt;br&gt;&#8220; + $det2 + &#8222;&lt;br&gt;&#8220; + $det3 + &#8222;&lt;br&gt;&#8220; + $det4 + &#8222;&lt;br&gt;&#8220; + $det5 + &#8222;&lt;br&gt;&#8220; + $det6 + &#8222;&lt;br&gt;&#8220; + $det7 + &#8222;&lt;br&gt;&#8220; + $det8 + &#8222;&lt;br&gt;&#8220; + $det9 + &#8222;&lt;br&gt;&#8220;<\/p>\n<p>if ($checkTaskname -match $eMailTask) {<br \/>\n$eMailTo = $eMailTo2<br \/>\n}<\/p>\n<p>send-mailmessage -to $eMailTo -from $eMailFrom -subject $eMailSubject -body $eMailBody -smtpServer $smtpserver -BodyAsHtml<br \/>\n}<br \/>\n}<\/a><\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p>Das Power-Shell Script selbst tr\u00e4gt man ebenfalls als Scheduled-Task ins Root ein &#8230;. ein Lauf alle 12h sollte wohl gen\u00fcgen.<\/p>\n<p>Es steht nat\u00fcrlich frei, dies auch f\u00fcr andere Scheduled Tasks zu verwenden, anzupassen etc.<br \/>\nSollte etwas unklar sein, einfach nen Kommentar hinterlassen \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der Scheduler von Windows meldet bei einem fehlerhaften Lauf eines Tasks entsprechend einen Fehler ins Event-Log.Doch &hellip; <a title=\"Scheduled Task Batch und 0x1\" class=\"hm-read-more\" href=\"https:\/\/www.pachlina.net\/stefan\/2014\/03\/02\/scheduled-task-batch-und-0x1\/\"><span class=\"screen-reader-text\">Scheduled Task Batch und 0x1<\/span>Weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[10],"class_list":["post-162","post","type-post","status-publish","format-standard","hentry","category-it","tag-script"],"_links":{"self":[{"href":"https:\/\/www.pachlina.net\/stefan\/wp-json\/wp\/v2\/posts\/162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pachlina.net\/stefan\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pachlina.net\/stefan\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pachlina.net\/stefan\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pachlina.net\/stefan\/wp-json\/wp\/v2\/comments?post=162"}],"version-history":[{"count":0,"href":"https:\/\/www.pachlina.net\/stefan\/wp-json\/wp\/v2\/posts\/162\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.pachlina.net\/stefan\/wp-json\/wp\/v2\/media?parent=162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pachlina.net\/stefan\/wp-json\/wp\/v2\/categories?post=162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pachlina.net\/stefan\/wp-json\/wp\/v2\/tags?post=162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}