Menü Schließen

Powershell extrakt Information von .eml Outlook Mail

PowerShell Logo

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!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert