PowerShell con EEAttachments
En EEAttachments puede especificar directamente scripts de PowerShell que procesen sus correos o archivos adjuntos.

Si introduce un script de PowerShell en los campos de inicio del trabajo de exportación, este se ejecutará ahora directamente en EEAttachments. Los mensajes, como errores e información, pueden mostrarse directamente en el registro de EEAttachments. Además, los argumentos ya no solo pueden pasarse como texto, sino también como objetos, ya que se generan variables de sesión con la información correspondiente.
Variables en "Run for attachment":
- filename: nombre de archivo sin ruta
- file: nombre de archivo con ruta
- mailitem: El elemento de correo de EWS (Microsoft.Exchange.WebServices.Data.Item). Puede acceder a todas las propiedades en el script de PS y también modificar el correo.
- Y otras propiedades especificadas en el campo de argumentos del EWS EMailSchema (Microsoft.Exchange.WebServices.Data.EmailMessageSchema).
Variables en "Run for content":
- bodyfile: Nombre de archivo del campo de cuerpo del correo que ha sido exportado como HTML.
- xmlfile: Nombre de archivo de las propiedades exportadas como XML.
- mailitem: El elemento de correo de EWS (Microsoft.Exchange.WebServices.Data.Item). Puede acceder a todas las propiedades en el script de PS y también modificar el correo.
- Y otras propiedades especificadas en el campo de argumentos del EWS EMailMessageSchema (Microsoft.Exchange.WebServices.Data.EmailMessageSchema).
Ejemplo 1: Esto permite mostrar las variables generadas por EEAttachments en su registro.
foreach ($v in Get-Variable |where {$_.Description -eq 'EEAttachments'})
{
Write-Information "$($v |select Name) $($v |select Value)"
}
Ejemplo 2: Acceso directo al objeto EMailMessage
Este script carga el módulo "Managed EWS" en la sesión de PowerShell y accede a las propiedades de asunto y cuerpo. Mediante "Write-Information", puede mostrar la salida en el registro de EEAttachments. Si hay errores en el script, también podrá verlos en el registro.
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
Ejemplo 3: Modificar el estado del indicador (flagstatus) del correo
Aquí puede aprender cómo cambiar el estado del indicador a "Completo" después de que el correo haya sido procesado.
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);
Ejemplo 4: Descomprimir archivos adjuntos después de exportar el correo
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\"
Ejemplo 5: Guardar correo (eml) usando su asunto
$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
Ejemplo 6: Reenviar correos electrónicos
Import-Module -Name 'C:\Program Files\Somebytes\EEAttachments\Microsoft.Exchange.WebServices.dll'
$item = Get-Variable -Name mailitem -ValueOnly
$item.Forward("", "email@somewhere.com");
Ejemplo 7: Renombrar archivo adjunto
$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
Ejemplo 8: Crear un CSV y añadirle algunas propiedades
En este script, añado los campos Asunto (Subject) y De (From) del mensaje procesado a un archivo CSV. Por cierto, ExMixedFoldersExMixedFolders [20] también puede crear archivos CSV desde una carpeta de Exchange a través de la "Tarea de Importación Exportación" (Import Export Task).
$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 thisPor favor, guarde los scripts de PowerShell en una ubicación donde personas no autorizadas no puedan modificarlos. Dado que el objeto del elemento contiene las credenciales (con la contraseña de la conexión actual), estas podrían ser sustraídas en ese caso.