Prozesse Überwachen

Home » Powershell » Prozesse Überwachen
Powershell Keine Kommentare

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

LEAVE A COMMENT