jueves, 22 de noviembre de 2012

Exchange 2010: listado de reenvíos de buzones

Es muy útil redirigir mensajes que llegan a un buzón y entregarlos en otro buzón. Además también se puede elegir si entregar el mensaje en ambos buzones o sólo en el de reenvío. Para ello puedes utilizar la consola de administración de Exchange y también puedes utilizar una pequeña herramienta para realizarlo directamente conociendo los nombres de las cuentas (propiedad samAccountName) de los buzones en cuestión.

Cuando existe un número elevado de buzones que están redirigidos a otros, es necesario tenerlo controlado y disponer de un listado de ellos con su correspondiente configuración en un momento dado.

Puedes realizar este listado con Powershell, en concreto con el cmd-let de Exchange Get-Mailbox, que muestra las propiedades de los buzones. En este caso las propiedades son ForwardingAddressDeliverToMailboxAndForward.

Con el siguiente script de Powershell puedes conseguir este listado: todas las cuentas de todos los buzones que tengan activado el reenvío, la cuenta del buzón de reenvío y si el reenvío se entrega en ambos buzones o sólo en el buzón de reenvío:

# ignora errores
$ErrorActionPreference = "SilentlyContinue"

function bruto_a_sam($bruto)
{
  $bruto2 = $bruto -replace "^.*/", ""
  $root = [ADSI]''
  $busca = new-object System.DirectoryServices.DirectorySearcher($root)
  $busca.Filter = "(&(|(objectCategory=person)(objectCategory=group))(Name=$bruto2))"
  $sam = $busca.findone()
  return $sam.properties.samaccountname
}

$buzones = Get-Mailbox
$c = 0
foreach ($b in $buzones)
{
  $buzon = [string]$b.samaccountname
  $reenviar_a = [string]$b.ForwardingAddress
  $dual = [string]$b.DeliverToMailboxAndForward

  if ( $reenviar_a )
  {
    Write-Host Buzón: $buzon
    $sam = bruto_a_sam($reenviar_a)
    write-host Dirección de reenvío: $sam
    if ( $dual -eq "True" )
    {
      write-host Entrega en buzón y en dirección de reenvío
    }
    else
    {
      Write-Host Entrega sólo en dirección de reenvío
    }
 
    Write-Host -----
    $c++
  }
}

Write-Host $c registros