PowerShell mit EEAttachments
Bisher konnte die PowerShell zwar mit EEAttachments eingesetzt werden, jedoch musste die powershell.exe wie hier gezeigt, explizit gestartet werden. Seit der Version 1.20 können Sie in der Zeile "Ausführen" nun direkt ein PowerShell Script angeben.

Wenn Sie in die Startfelder des Exportauftrages ein PowerShell-Script eintragen, dann wird dieses direkt in EEAttachments ausgeführt. Meldungen, wie Fehler und Informationen, können damit direkt im EEAttachments Log angezeigt werden. Außerdem können Argumente nicht mehr nur als Text, sondern auch als Objekt übergeben werden, denn Es werden Sessionvariablen mit den entsprechenden Informationen erzeugt.
Bei "Start pro Anhang" sind das folgende:
- filename: Dateiname ohne Pfad
- file: Datei mit Pfadangabe
- mailitem: Das Mailtem aus EWS ( Microsoft.Exchange.WebServices.Data.Item ) Sie können hier im PS-Script auf alle Eigenschaften zugreifen und die Mail auch modifizieren.
- und weitere Eigenschaften, die unter Argumente aus dem EWS EMailSchema (Microsoft.Exchange.WebServices.Data.EmailMessageSchema) die im Argumente Feld angegeben wurden.
Bei "Start pro Mailinhalt" sind es diese:
- bodyfile: Dateiname des Mailbodys der als HTML exportiert wurde.
- xmlfile: Dateiname des XML Exports des Mailelements.
- mailitem: Repräsentation des Mailelements als Objekt (Microsoft.Exchange.WebServices.Data.Item)
- und weitere Eigenschaften, die unter Argumente aus dem EWS EMailSchema (Microsoft.Exchange.WebServices.Data.EmailMessageSchema) die im Argumente Feld angegeben wurden.
Beispiel 1: Anzeige der von EEAttachments erzeugten Variablen im EEAttachments Log
foreach ($v in Get-Variable |where {$_.Description -eq 'EEAttachments'})
{
Write-Information "$($v |select Name) $($v |select Value)"
}
Beispiel 2: Direkter Zugriff auf das EMailMessage Objekt
Das Script lädt die "Managed EWS" DLL in die PowerShell-Session und greift anschließend auf den Betreff sowie den Body der Mail zu um Ihn in per "Write-Information" im EEAttachments Log anzuzeigen. Evtl. auftretende Fehler werden ebenfalls im Log angezeigt.
Import-Module -Name 'C:\Program Files\Somebytes\EEAttachments\Microsoft.Exchange.WebServices.dll'
$item = Get-Variable -Name mailitem -ValueOnly
$psPropertySet = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
Write-Information $item.Subject
$item.Load($psPropertySet)
Write-Information $item.Body.Text
Beispiel 3: Änderung der Kennzeichnung der Mail
In diesem Beispiel wird gezeigt, wie die der FlagStatus der Mail auf "Erledigt" geändert werden kann.
Import-Module -Name 'C:\Program Files\Somebytes\EEAttachments\Microsoft.Exchange.WebServices.dll'
$item = Get-Variable -Name mailitem -ValueOnly
$psPropertySet = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.ItemSchema]::Flag)
$item.Load($psPropertySet)
$item.Flag.FlagStatus = [Microsoft.Exchange.WebServices.Data.ItemFlagStatus]::Complete;
$item.Update([Microsoft.Exchange.WebServices.Data.ConflictResolutionMode]::AutoResolve);
Beispiel 4: Anhang nach dem Export entpacken
Add-Type -AssemblyName System.IO.Compression.FileSystem
function Unzip
{
param([string]$zipfile, [string]$outpath)
[System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
}
$attachment = Get-Variable -Name file -ValueOnly
Unzip $attachment "C:\temp\"
Beispiel 5: Mail (eml) mit Betreff als Dateinamen speichern
$eml = Get-Variable -Name emlfile -ValueOnly
$subject = Get-Variable -Name subject -ValueOnly
$emlfile = Get-ChildItem $eml
[System.IO.Path]::GetinvalidFileNameChars() | ForEach-Object {$subject = $subject.Replace($_," ")}
$newfilename = $emlfile.DirectoryName + '\' + $subject +'.eml'
move $eml $newfilename
Beispiel 6: Mail weiterleiten.
Import-Module -Name 'C:\Program Files\Somebytes\EEAttachments\Microsoft.Exchange.WebServices.dll'
$item = Get-Variable -Name mailitem -ValueOnly
$item.Forward("", "email@irgendwo.de");
Beispiel 7: Anhang umbenennen
$file = Get-Variable -Name file -ValueOnly
$subject = Get-Variable -Name subject -ValueOnly
$fileobj = Get-ChildItem $file
[System.IO.Path]::GetinvalidFileNameChars() | ForEach-Object {$subject = $subject.Replace($_," ")}
$newfilename = $fileobj.DirectoryName + '\' + $subject + "."+ $fileobj.Extension
$counter = 0
while(Test-Path -Path $newfilename)
{
$counter++;
$newfilename = $fileobj.DirectoryName + '\' + $subject + '('+$counter.ToString()+').'+ $fileobj.Extension
}
move $file $newfilename
Beispiel 8: Export von E-Mailfeldern in eine CSV
In diesem Beispiel werden einige Felder aus der E-Mail ausgelesen und anschließend an eine CSV Datei angehängt.
Übrigens: ExMixedFolders kann auch CSV Dateien aus einem Exchange Ordner erzeugen und zwar mit dem "Export Import" Auftrag.
$outfile = "C:\temp\Outfile.csv"
$newcsv = {} | Select "Subject","From"
$subject = Get-Variable -Name subject -ValueOnly
$from = Get-Variable -Name from -ValueOnly
$newcsv.Subject =$subject
$newcsv.From = $from.Address
$newcsv | Export-CSV $outfile –Append -NoTypeInformation
hide thisBitte speichern Sie die PowerShell Scripte an einem Ort, an dem Sie keine unberechtigte Person modifizieren kann, da das Item Objekt die Credentials (mit Passwort für die aktuelle Verbindung) enthält und diese so aus dem Programm entwendet werden könnten.