SMTP Logs der Connectoren auslesen

Es galt herauszufinden, welche Server im Unternehmen den Exchange Server noch aktiv nutzen. Dafür wurde das Logging auf den Receive Connectoren auf ausführlich gestellt und erst einmal gewartet. Nach ein paar Tagen habe ich dann folgendes Skript ausgeführt welches lediglich das Log parsed und eine Tabelle mit den Servern liefert die mit dem Exchange reden:

# Pfad zu dem Log-File anpassen
# Ggf. müssen auch mehrere Logs geparsed werden
$import = Get-Content 'C:\Temp\Logs\SMTPReceive\receive.txt'

$expectHelo = 1
$expectSource = 0

$Tabelle = @()

for ($i = 0; $i -lt $import.Length; $i++){

	if ($expectHelo){
		if ($import[$i] -like "*HELO*"){
			$splitter = $import[$i] -Split "HELO"
			$Server = $splitter[$splitter.Length-1]
			$Server = $Server -Replace ",",""
			$Server = $Server -Replace " ",""

			$expectHelo = 0
			$expectSource = 1
		}
		
		if ($import[$i] -like "*EHLO*"){
			$splitter = $import[$i] -Split "EHLO"
			$Server = $splitter[$splitter.Length-1]
			$Server = $Server -Replace ",",""
			$Server = $Server -Replace " ",""

			$expectHelo = 0
			$expectSource = 1
		}
	}

	if ($expectSource){
		if ($import[$i] -like "*MAIL FROM:*"){
			$splitter = $import[$i] -Split "MAIL FROM:"
			$Result = $splitter[$splitter.Length-1]
			$Result = $Result -Replace "<",""
			$Result = $Result -Replace ">",""
			$Result = $Result -Replace " ",""
			$Result = $Result -Replace ",",""

			$Reihe = New-Object System.Object
			$Reihe | Add-Member -type NoteProperty -name Server -value $Server
			$Reihe | Add-Member -type NoteProperty -name Absender -value $Result
			$Tabelle += $Reihe

			$expectHelo = 1
			$expectSource = 0
			
			
		}
	}
}

$Tabelle

Dasselbe kann man dann natürlich auch mit den Logs der Sende Connectoren machen, falls man wissen möchten ob div. Smarthosts denn überhaupt noch jemals angesprochen werden:

# Pfad zu dem Log-File anpassen
# Ggf. müssen auch mehrere Logs geparsed werden
$import = Get-Content 'C:\Temp\Logs\SMTPReceive\receive.txt'

$expectHelo = 1
$expectSource = 0

$Tabelle = @()

for ($i = 0; $i -lt $import.Length; $i++){

	if ($expectHelo){
		if ($import[$i] -like "*MAIL FROM:*"){
			$splitter = $import[$i] -Split "MAIL FROM:"
			$Server = $splitter[$splitter.Length-1]
			$Server = $Server -Split ">"
			$Server = $Server[0]
			$Server = $Server -Replace "<",""
			$Server = $Server -Replace " ",""

			$expectHelo = 0
			$expectSource = 1
		}
	}

	if ($expectSource){
		if ($import[$i] -like "*RCPT TO:*"){
			$splitter = $import[$i] -Split "RCPT TO:"
			$Result = $splitter[$splitter.Length-1]
			$Result = $Result -Replace "<",""
			$Result = $Result -Replace ">",""
			$Result = $Result -Replace " ",""
			$Result = $Result -Replace ",",""

			$Reihe = New-Object System.Object
			$Reihe | Add-Member -type NoteProperty -name MailFrom -value $Server
			$Reihe | Add-Member -type NoteProperty -name RcptTo -value $Result
			$Tabelle += $Reihe

			$expectHelo = 1
			$expectSource = 0
			
			
		}
	}
}

$Tabelle