Powershell-Script: E-Mail-Benachrichtigung bei Datei-Erstellung

Ich hatte mal die Aufgabe eine einfache Lösung zur Benachrichtigung per Mail bei Dateierstellung zu finden. Gebraucht wurde dass für Backup-Dateien die per FTP auf ein Windows-System hochgeladen wurden. Ich habe das als Powershell-Script gelöst dass einfach alle Stunde ausgeführt wird.

Hier mal der Code des Scriptes:

#Email-Funktion
function sendmail($Betreff,$body)
{
$SmtpClient = new-object system.net.mail.smtpClient("smtp.email-server.local", 587)
$MailMessage = New-Object system.net.mail.mailmessage
$SmtpClient.Credentials = New-Object System.Net.NetworkCredential("benutzername", "kennwort")
$SmtpClient.EnableSsl = $true
$mailmessage.from = "absender@e-mail.local"
$mailmessage.To.add("ziel@e-mail.local")
$mailmessage.Subject = $subject
$MailMessage.IsBodyHtml = $true
$mailmessage.Body = $body
$smtpclient.Send($mailmessage)
}

#Pfadangabe
$path = "D:\Backup"
if (!$path) 
{break}
if ($path.length -gt 3) 
{$path=$path + "\"}

#LogFile
$LogFile = "D:\Backup-log.log"

#Ueberwachung
$date1Hours = (Get-Date).AddHours(-1) 
$data =  Get-ChildItem $path -recurse -filter "*.tgz" | where-object {$_.CreationTime -gt $date1Hours -or $_.LastWriteTime -gt $date1hours } 

foreach ($file in $data)
{
	if ($file)
	{
	$filepath = $file.fullname
	$pathname = $filepath.split("\")[-2]
	$dataname = $filepath.split("\")[-1]
	$filesize = $file.Length/1mb

	$out = "In " + $pathname + " wurde ein Backup erstellt. Die Datei: " + $dataname + " wurde am " + $file.CreationTime + " erstellt." + " Größe: " + $filesize + " MB"
    write-host $out
	
	#LogFile schreiben - anhängend
   	$out | Out-File $LogFile -append

	#Email-Text
   	$subject = "Backup von " + $pathname + ". Größe: " + $filesize + " MB"
   	$body = "In " + $pathname + " wurde ein Backup erstellt. Die Datei: " + $dataname + " (Größe: " + $filesize + "MB)" + " wurde am " + $file.CreationTime + " erstellt."
  	 
	#Email-Senden	
   	sendmail $Betreff $body
   	}
}

Die Ordner unter D:\backup heißen so wie die System die gesichert wurden – deshalb steht im Betreff der Mail sowas wie: „Backup von Web-Server-1. Größe: 2568 MB“. So kann man das auch schön zuordnen.
Das Script durchsucht die Ordner und filtert alle Dateien mit .tgz aus die jünger wie 1 Stunde sind – und schickt dann für jede Datei die E-Mail.

Ein wenig Quick-and-Dirty – aber hat gemacht was es soll 🙂

Kommentar verfassen