Wenn ein Skript fehlschlägt, weil der Computer heruntergefahren ist, oder wenn das Skript denkt, dass es einwandfrei funktioniert, dies aber nicht der Fall ist, wie kann ich eine Fehlerwarnung auslösen?

Wenn ein Skript fehlschlägt, weil der Computer heruntergefahren ist, oder wenn das Skript denkt, dass es einwandfrei funktioniert, dies aber nicht der Fall ist, wie kann ich eine Fehlerwarnung auslösen?

Ich verwende derzeit PowerShell und den Taskplaner, um eine Aufgabe für das Unternehmen zu automatisieren, in dem ich derzeit arbeite. Dieses Skript aktualisiert eine Liste und wird idealerweise alle 10 Minuten ausgeführt. Der Computer, auf dem wir dieses wiederkehrende Skript ausführen, kann etwas wackelig sein und wird zufällig heruntergefahren. Ich versuche, eine Möglichkeit zu finden, Benachrichtigungen zu erhalten, wenn der Computer, auf dem das Skript ausgeführt wird, offline ist.

Ich denke hauptsächlich daran, für jeden Programmdurchlauf eine Benachrichtigung einzurichten und dann ein zweites Skript die Benachrichtigung überprüfen zu lassen. Wenn eine Benachrichtigung fehlt, die darauf hinweist, dass das Skript nicht ausgeführt wurde, sendet es eine Warnung. Ich habe eine Antwort gefunden, die mich teilweise zu einer Antwort führt, aber ich glaube nicht, dass sie funktionieren würde, wenn die Maschine herunterfährt.

Lassen Sie mich vom Windows Taskplaner bei einem Fehler benachrichtigen

Vielen Dank, dass Sie sich die Zeit genommen haben, bei dieser Frage zu helfen.

Antwort1

Ich stimme den anderen Kommentaren zu. Sie benötigen eine zweite Maschine, die einen Konnektivitätstest oder etwas Ähnliches für die Maschine durchführt, auf der der andere Code ausgeführt wird, um einen Fehler zu erkennen. Hier ist ein Beispiel für ein Powershell-Skript, das Ihnen eine E-Mail sendet, wenn es keine erfolgreiche Ping-Antwort von der anderen Maschine erhält. Der folgende Code geht davon aus, dass Sie Office365 Mail/Exchange Online verwenden, kann aber nach Belieben geändert werden.

$testComputer = ping 1.1.1.1 -n 1 | select-string "Sent"  #replace the 1.1.1.1 with your server that fails

if($testComputer -match 'Sent = 1')
{
    write-host("Connection to computer running scheduled task is good.")
}
else
{
    write-host("Connection to computer running scheduled task has failed. Check to see if it is offline.")
    $computerParamsFailed = "Connection to computer running scheduled task has failed. Check to see if it is offline." 

    $username="[email protected]"  #replace with email
    $password=ConvertTo-SecureString "PASSWORDHERE"-AsPlainText -Force  #replace what is in quotes with your email password
    $mycredentials = New-Object System.Management.Automation.PSCredential ($username, $password)

    Send-MailMessage -To [email protected] -subject "Computer has gone offline." -body $computerParamsFailed -UseSsl -Port 587 -SmtpServer smtp.office365.com -From $username -Credential $mycredentials
    #change "to" email value 
}

Dies kann so eingestellt werden, dass es alle 10 Minuten auf einem anderen Computer ausgeführt wird. Wenn eine Verbindung erkannt wird, geschieht nichts. Wenn keine Antwort eingeht, wird Ihnen eine E-Mail gesendet.

Antwort2

Ich stimme Worthwelle zu. Es müsste eine andere Maschine geben, die den Status der Maschine überwacht, auf der das Skript ausgeführt wird. Wenn es in diesem Fall eine Maschine gibt, die zuverlässig genug ist, um die erste Maschine zu überwachen, können Sie das Skript auch einfach auf dieser Maschine ausführen. Beste Lösung: Beheben Sie das Problem, das dazu führt, dass die Maschine, auf der das Skript ausgeführt wird, abstürzt, oder ersetzen Sie sie einfach.

verwandte Informationen