Somebytes SoftwareSomebytes Software Entwicklung

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.

Datei entpacken mit PowerShell

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
  • cmdLineArgs: Die angegebenen Argumente als String[]
  • 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.
  • cmdLineArgs: Die angegebenen Argumente als String[]
  • 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 (x86)\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 (x86)\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\"

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önnte.