proflash
Goto Top

Microsoft Outlook Postfach per Powershell sortieren und Betreff auslesen

Hallo zusammen,

da ich schon mehrere Beiträge gesehen habe, die nach so einer Lösung suchen wollte ich mal hier etwas mit euch teilen.

Dies ist ein PowerShell Skript welches ein Ordner im Postfach Scannt und die Betreffzeilen nach bestimmten Schlagwörter (in meinem Fall ein Wort) durchsucht. In diesem Beispiel ist es so, dass wenn das Schlagwort nicht in der Betreffzeile vorhanden ist, wird eine Meldung an unser Monitoring (Zabbix) geschickt. Nach den Vorgang werden die Mails in einen anderen Ordner verschoben.

$Term  = '['            #Schlagwort für den Betreff (Nicht notwendig) Lässt alle Emails aus die nicht dieses Zeichen/Wort im   
                                Betreff haben
$Scope = 'Ordnername'   #Postfachordner der durchsucht werden soll  
Add-Type -assembly "Microsoft.Office.Interop.Outlook"  
$Outlook = New-Object -comobject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")  
$Emails  = $Outlook.AdvancedSearch( $Scope, "urn:schemas:httpmail:subject LIKE '%$Term%'", $false )  


Start-Sleep -Seconds 10

$ergebnis = $Emails.Results | Select-Object -Property Subject

if ($ergebnis -notlike "*Suchwort*") {      # if regel die sagt wenn der Betreff nicht "Suchwort" ist dann mach dies  
C:\Users\administrator\Documents\zabbix\zabbix_sender.exe -vv -k backup.status -o "Fail" -z 192.168.xxx.xxx -s "Zabbix server" # Meldungsbefehl an Monitoring Zabbix  
}
else {
C:\Users\administrator\Documents\zabbix\zabbix_sender.exe -vv -k backup.status -o "Success" -z 192.168.xxx.xxx -s "Zabbix server" }  
Write-Host $Alarm  
$Zähler = 1

#Emails verschieben

do {
$ergebnis = $Emails.Results | Select-Object -Property Subject

$store = $namespace.Stores['email@gmail.de']  #Email die betroffen ist eintragen  
$root = $store.GetRootFolder()
$inbox = $root.Folders['Ordnername'] #Ordner eintragen von dem die Emails verschoben werden sollen  
$targetFolder = $root.Folders['Ordnername'] #Ordner eintragen in den die Mails verschoben werden sollen  
$inbox.Items | 
	ForEach-Object{$_.Move($targetFolder)}
$Zähler ++
$Zähler
} while($Zähler -lt 200)
Stop-Process -Name OUTLOOK

Ich hoffe der Code kann den ein oder anderen helfen. Ansonsten gerne fragen.

MfG

Content-ID: 7533375454

Url: https://administrator.de/contentid/7533375454

Ausgedruckt am: 21.11.2024 um 17:11 Uhr

DarkZoneSD
DarkZoneSD 15.06.2023 um 10:05:25 Uhr
Goto Top
Moin,

Mal von eine Frage von einem Exchange-unwissenden.

Wäre das mit einer Eingangsregelung im Exchange direkt nicht viel einfacher? Z.B. in einen Ordner verschieben und dann alle Inhalte von dem Ordner dann wie gewünscht weiter verarbeiten.

Grüße

Florian
user217
user217 15.06.2023 um 10:35:00 Uhr
Goto Top
Nur zum Verständnis, du suchst im Outlook im Betreff ob "Veeam Backup success" meldet? Das script ist super aber das gäbe es auch als Zabbix Template.
ProFlash
ProFlash 16.06.2023 um 08:09:36 Uhr
Goto Top
@DarkZoneSD ja natürlich das verschieben kann man auch als Regel in Outlook oder Exchange direkt einstellen, jedoch ist das verschieben nicht unbedingt notwendig. Es wird nur gemacht, da der Suchlauf sonst die alten Mails jedes mal neu mit Filtern würde und so das Ergebnis verfälschen. Bestimmt gibt es noch eine Möglichkeit per Datums Überprüfung nur die aktuellen Mails zu scannen, aber hier hab ich das so gelöst.

Danke für deinen Kommentar :D
ProFlash
ProFlash 16.06.2023 um 08:12:01 Uhr
Goto Top
@user217 ja das ist richtig. Wir haben leider nur eine abgespeckte Version von Veeam und deswegen steht uns leider nicht die Veeam API zur Verfügung die für das Template notwendig ist. Es gibt auch noch ne Möglichkeit per SNMP Trap Nachrichten von Veeam zu erhalten über den Status der Updates. Das hat bei uns warum auch immer nicht funktioniert und deswegen habe ich es so gelöst auch wenn es nicht der alltägliche Weg ist.

Danke für deinen Hinweis :D