
In einem Projekt zur Mailmigration von Exchange OnPrem in die Microsoft Cloud zu Exchange Online, wurden einige Mails als .eml Datei exportiert. Später mussten diese manuell Kontrolliert und erneut zugestellt werden. Dafür wurden die mit nachfoglendem Script rekrusiv aus einem Verzeichnis und dessen Unterverzeichnisse durchsucht und folgende Informationen:
- X-Sender
- From
- Subject
- To
- X-MS-Exchange-Organization-SCL
In eine Excel .csv Datei geschrieben / exportiert, sodass dann in Excel weiter gefiltert werden konnte.
Hier das entsprechende Powershell Script zum rekrusiven durchsuchen der .eml Dateien und auswerten dieser mit anschließender Erstellung einer Excel .CSV Datei:
<#
erstellt am 21.02.2022
liest alle .eml Dateien aus einem Verzeichnis und wertet diese aus
#>
$CSVOutFile = "C:\PF-Exports\pf-eml-index.csv"
$newCSV = {} | Select "X_Sender","From","Subject","To","SCL","File","Size" | Export-Csv $CSVOutFile -NoTypeInformation -Encoding UTF8
$emlPath="C:\PF-Exports\Mailexports"
$countItems = Get-ChildItem $emlPath -Recurse |measure
$aFiles = Get-ChildItem $emlPath -Recurse
# extract relevant Informations
$RegExXSender = '^x-sender:'
$RegExFrom = '^from:'
$RegExSubject = '^subject:'
$RegExTo = '^to:'
$RegExSCL = 'X-MS-Exchange-Organization-SCL:'
$CSVFile = Import-CSV $CSVOutFile
$i = 0;
foreach( $FileInfo IN $aFiles)
{
# Write-Host $FileInfo.FullName
$CSVFile.X_Sender = (Get-Content $FileInfo.FullName | Select-String $RegExXSender).ToString().Replace("X-Sender:","")
$CSVFile.From = (Get-Content $FileInfo.FullName | Select-String $RegExFrom).ToString().Replace("From:","")
$CSVFile.Subject = (Get-Content $FileInfo.FullName | Select-String $RegExSubject).ToString().Replace("Subject:","")
$CSVFile.To = (Get-Content $FileInfo.FullName | Select-String $RegExTo).ToString().Replace("To:","")
$CSVFile.SCL = (Get-Content $FileInfo.FullName | Select-String $RegExSCL).ToString().Replace("X-MS-Exchange-Organization-SCL:","")
$CSVFile.File = $FileInfo.FullName.Replace($emlPath,"")
$CSVFile.Size = $FileInfo.Length
# write to CSV
if($i=0)
{
# write 1-Line
$CSVFile | Export-Csv $CSVOutFile
}else{
# append all after 1-Line
$CSVFile | Export-Csv $CSVOutFile -Append
}
}
Thats it…Have Fun!
Antworten