El Blog de Gualtrysoft

Windows 2000/2003/2008, Active Directory, VBScript, Hyper-V, PowerShell y todo aquello interesante a la hora de usar, configurar y administrar Windows Server. También tenemos longanizas…

PowerShell: Obtener los buzones de correo de un servidor Domino

Posted by urpiano en lunes 25 \25\+01:00 abril \25\+01:00 2011

De la misma manera que se pueden obtener con una consulta LDAP los objetos de un dominio de Active Directory, se pueden obtener los objetos de Domino. En este ejemplo vamos a obtener los buzones de correo de un servidor Domino (objetos de tipo dominoPerson).

Para ello usaremos un objeto System.DirectoryServices.DirectoryEntry con el que conectaremos a Domino. Para poder realizar esta conexión de manera anónima, deberemos usar un objeto Anonymous de la enumeración System.DirectoryServices.AuthenticationTypes que será pasado como parámetro al constructor del objeto DirectoryEntry:

# Creamos un objeto de tipo de autenticación anónimo para el acceso a un
# servicio de directorio
$TipoAutenticacion = [System.DirectoryServices.AuthenticationTypes]::Anonymous

# Creamos un objeto DirectoryEntry que se carga con una conexión al servidor de
# Domino, estableciendo el objeto de tipo de autenticación (anónima) que creamos
# antes. Los dos nulos son el usuario y la contraseña respectivamente
$Domino = New-Object System.DirectoryServices.DirectoryEntry `
                                    "LDAP://srvdomino",`
                                    $null,`
                                    $null,`
                                    $TipoAutenticacion

Una vez obtenido el objeto de Domino, usaremos un objeto System.DirectoryServices.DirectorySearcher pasando el objeto de Domino como parámetro:

#Creamos un objeto DirectorySearcher
$Buscador = [System.DirectoryServices.DirectorySearcher]$Domino

A continuación debemos establecer los parámetros necesarios en el buscador para realizar la consulta. Estos parámetros son el filtro (se trata de una consulta LDAP) y el ámbito (en este ejemplo SubTree):

# Montamos el filtro LDAP. El filtro hará que sólo se traigan los objetos de
# tipo dominioPerson
$Filtro = "(objectClass=dominoPerson)"

# Establecemos el filtro en el objeto DirectorySearcher
$Buscador.Filter = $Filtro

# Establecemos que la búsqueda será recursiva
$Buscador.SearchScope = "Subtree"

Además deberemos pasar un array con los atributos que queremos obtener (OJO: los atributos son sensibles al caso en Domino, y deben ser escritos en minúsculas). Estos atributos deben ser agregados uno a uno al buscador:

# Montamos un array con los campos que queremos que se traiga la búsqueda
$Atributos = "cn","sn","givenname","mail","mailaddress","maildomain"

# Recorremos uno a uno los atributos y los cargamos en el objeto
# DirectorySearcher
ForEach($Atributo In $Atributos)
{
    # El método Add devuelve el índice del elemento que se ha cargado. Este
    # índice no nos interesa, por lo que lo enviamos al limbo con [Void]
    [Void]$Buscador.PropertiesToLoad.Add($Atributo)
}

Ya está todo listo para obtener los buzones de Domino. Para ello ejecutamos el método FindAll del buscador. Podemos ponerlo como colección de un bucle ForEach:

# Recorremos uno a uno los resultados de la búsqueda
ForEach($Buzon In $Buscador.FindAll()){$Buzon}

Poniendo todos los fragmentos de código juntos:

# Creamos un objeto de tipo de autenticación anónimo para el acceso a un
# servicio de directorio
$TipoAutenticacion = [System.DirectoryServices.AuthenticationTypes]::Anonymous

# Creamos un objeto DirectoryEntry que se carga con una conexión al servidor de
# Domino, estableciendo el objeto de tipo de autenticación (anónima) que creamos
# antes. Los dos nulos son el usuario y la contraseña respectivamente
$Domino = New-Object System.DirectoryServices.DirectoryEntry `
                                    "LDAP://srvdomino",`
                                    $null,`
                                    $null,`
                                    $TipoAutenticacion

#Creamos un objeto DirectorySearcher
$Buscador = [System.DirectoryServices.DirectorySearcher]$Domino

# Montamos el filtro LDAP. El filtro hará que sólo se traigan los objetos de
# tipo dominioPerson
$Filtro = "(objectClass=dominoPerson)"

# Establecemos el filtro en el objeto DirectorySearcher
$Buscador.Filter = $Filtro

# Establecemos que la búsqueda será recursiva
$Buscador.SearchScope = "Subtree"

# Montamos un array con los campos que queremos que se traiga la búsqueda
$Atributos = "cn","sn","givenname","mail","mailaddress","maildomain"

# Recorremos uno a uno los atributos y los cargamos en el objeto
# DirectorySearcher
ForEach($Atributo In $Atributos)
{
    # El método Add devuelve el índice del elemento que se ha cargado. Este
    # índice no nos interesa, por lo que lo enviamos al limbo con [Void]
    [Void]$Buscador.PropertiesToLoad.Add($Atributo)
}

# Recorremos uno a uno los resultados de la búsqueda
ForEach($Buzon In $Buscador.FindAll()){$Buzon}

Deja un comentario