Automatisierte Überwachung von Prozessen
Ein einfaches Script zur überwachung von Prozessen (aktiv ist oder nicht),
welches das Ergebnis in eine csv-Tabelle schreibt.
Sollte der Prozess nicht aktiv sein wird eine Email mit Anhang der csv-Tabelle versendet.
Code:
########################################################################################### # Überwacht einen Prozess auf dem Rechner und schreibt das Ergebnis in eine CSV-Tabelle, # # wenn der Prozess nicht aktiv ist, wird eine E-Mail abgeschickt. # ########################################################################################### #Programm welches überwacht werden soll [genaue Bezeichnung ermitteln via get-process] $Anwendung = ("FireFox") #Zeitangabe in welchen abständen geprüft werden soll $timer = 5 #Sekunden #Tabelle-Speicherort $Datei = "Tabelle.csv" $Pfad="C:\Pfad\" $DateiPfad = "$Pfad$Datei" #------------------------Do-not-Change-anything-below---------- #-start-loop------------------------------------------------------- $timeout = new-timespan -Minutes 60 $sw = [diagnostics.stopwatch]::StartNew() while ($sw.elapsed -lt $timeout){ $Date=Get-Date -format "dd.MM.yyyy" # year.month.day-hour.minutes.seconds $Time=Get-Date -format "HH:mm:ss" # year.month.day-hour.minutes.seconds $Hostn=Hostname #Computername #Prüft ob Verzeichnis existiert, wenn nicht wird das Verzeichnis erstellt If (Test-Path $storloc) {} else {mkdir -Path $storloc} #Prüft ob Anwendung aktiv und schreibt Ergebnis in Tabelle $Process = Get-Process -name $Anwendung | select ProcessName, id, CPU If ($Process.Count -gt 0) { $Status = "Online" clear; Write-Host "Anwendung: $Anwendung online, Eintrag in Tabelle $Time"} else { $Status = "Offline" clear; Write-Host "Anwendung: $Anwendung offline, Eintrag in Tabelle, Mail an Admin mit Tabelle $Time"} #custom Objekt $new =New-Object PSObject -Property @{ Hostname = ("$Hostn") Status = ("$Status") Date= ("$Date") Time= ("$Time") Anwendung=("$Anwendung") } #Anzeige stimmt nicht mit der Datei-Reihenfolge überein $new |Select-Object Hostname, Anwendung, Status, Date, Time | Export-Csv -path $DateiPfad -NoTypeInformation -Delimiter ";"-Append #Schreibt in csv-Datei #Wenn Anwendung nicht aktiv, dann Mail an Admin If ($Status -eq "Offline") { #-Do-not-change-anything-below----------------------------------- #-----------------------Bei-Bedarf-anpassen---------------------- #Sender $Username = "Sender@web.de"; $Password = "SenderPasswort"; $smtpServer = "smtp.web.de", "587"; #Empfänger-&-Nachricht $Empfaenger = "Empfaenger@web.de"; $Anhang = $DateiPfad; $Betreff = "$Hostn :$Anwendung Offline"; $Nachricht = "Anwendungsfehler! Host: $Hostn Programm: $Anwendung Offline $Date $Time Error-Log befindet sich im Anhang"; #---------------------------------------------------------------- #-Do-not-change-anything-below----------------------------------- function Send-ToEmail([string]$email, [string]$attachmentpath){ $message = new-object Net.Mail.MailMessage; $message.From = $Username; $message.To.Add($email); $message.Subject = $Betreff; $message.Body = $Nachricht; $attachment = New-Object Net.Mail.Attachment($attachmentpath); $message.Attachments.Add($attachment); $smtp = new-object Net.Mail.SmtpClient($smtpServer); $smtp.EnableSSL = $true; $smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password); $smtp.send($message); write-host "Mail Sent" ; $attachment.Dispose(); } Send-ToEmail -email $Empfaenger -attachmentpath $Anhang; }# if ($status -eq Offline) Ende #Setze den Timer wieder auf 60Minuten um einen unendlichen Loop zu erzeugen $timeout = new-timespan -Minutes 60 start-sleep -Seconds $timer } #Ende