Somebytes SoftwareSomebytes Software Development

PowerShell con EEAttachments

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

Use PowerShell from EEAttachments

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.