Funciones en Exchange Management Shell

Por Daniel Seveso

 

Conectar comandos y agregar lógica adicional, es lo que hace de Exchange Management Shell (EMS) una potente plataforma de administración. Las funciones y script, nos permiten implementar estos grupos de comandos y hacerlos trabajar en conjunto para crear tareas o reportes más complejos que cualquier comando individual.

 

Las funciones en EMS son grupos de cmdlets a los que se les da un nombre y se ejecutan en bloque. El mismo concepto de funciones que en la mayoría de los lenguajes de programación, donde las mismas pueden recibir parámetros, y devolver resultados. El resultado de una función puede ser pasado a un cmdlet, ser asignado a una variable o simplemente escribirlo en pantalla. En EMS puedo definir una función directamente en la línea de comandos y la misma tendrá validéz durante toda la sessión.

 

Ejemplo de función definida en una línea:

 

[MSH] c:\>function presentar {"Mi nombre es Exchange 2007"}

[MSH] c:\>presentar

Mi nombre es Exchange 2007

 

La función "presentar" (nombre de la función) quedará definida durante toda la sessión de EMS.

Si queremos incluír un parámetro y variables para implementar nuestra función básica, podemos escribir:

 

[MSH]c:\>function presentar {

>> param($nombre)

>>$mensaje = "Hola "

>>$mensaje2 = ", mi nombre es Exchange 2007."

>>$mensaje = $mensaje + $nombre + $mensaje2

>>$mensaje

>>}

>>

 

[MSH] c:\>presentar Daniel

Hola Daniel, mi nombre es Exchange 2007.

 

Ya tienen la idea, veamos ahora como podemos usar esto para administrar Exchange. Volvamos al ejemplo de reportes que mencionamos como algo atractivo. Supongamos que queremos una función que nos muestre los datos que son relevantes para mi de un usuario:

 

[MSH]c:\>function Infombx

{

param($useralias)

$userinfo = get-mailbox $useralias

$mailboxinfo = get-mailboxstatistics $useralias

Información de cuenta

=====================

Nombre: $($userinfo.displayname)

Alias: $($userinfo.alias)

Dirección e-mail: $($userinfo.PrimarySmtpAddress)

LegacyExchangeDN: $($userinfo.legacyExchangeDN)

Principal Name: $($userinfo.UserPrincipalName)

 

Información de Mailbox

======================

Tamaño Mailbox: $($mailboxinfo.totalitemsize)

Servidor: $($mailboxinfo.servername)

Groupo de almacenamiento: $($mailboxinfo.storagegroupname)

Base de datos: $($mailboxinfo.databasename)

}

 

El resultado de esta función sería:

 

[MSH]c:\>function Infombx wilpai

 

Información de cuenta

=====================

Nombre: Wilson Pais

Alias: wilpai

Dirección e-mail: wilpai@contoso.com

LegacyExchangeDN: /o=Contoso/ou=Exchange Administrative Group 1/cn=Recipients/cn=wilpai

Principal Name: wilpai@corp.contoso.com

 

Información de Mailbox

======================

Tamaño Mailbox: 4370B

Servidor: SERVER1

Groupo de almacenamiento: MG01

Base de datos: Manager

 

La implementación de esta función es muy sencilla:

a) Uso los cmdlet get-mailbox y get-mailboxstatistics para obtener los datos (propiedades) que me interesan.

b) Estas propiedades las almaceno en las variables $userinfo y $mailboxinfo. Como verán estas variables almacenan el objeto devuelto por los cmdlets sin necesidad de especificar tipo de datos.

c) Luego que tenemos los objetos con todas sus propiedades almacenados en las variables, usamos la notación <objeto>.<propiedad> para mostrar las propiedades que nos interesan.

En el artículo Exchange PowerShell – Manejo de objetos y “Pipelining” mencioné el cmdlet get-member. El mismo cmdlet puede ser usado para listar las propiedades disponibles de un objeto determinado.

Si no recuerdo los nombres de las propiedades que me interesan, puedo usar el cmdlet get-member para listarlas:

 

[MSH] C:\>get-mailbox |get-member –membertype Property

 

d) Para mostrar los valores en pantalla simplemente encerramos todo el reporte entre comillas dobles escribiendo los títulos y nombres para cada propiedad. Para desplegar los valores de las propiedades debemos encerrar las mismas entre paréntesis y anteponerles el signo $. Esto es necesario a la hora de representar variables que se incluyen dentro de párrafos de texto.

 

Este ejemplo es muy básico solo para mostrar algunos conceptos. Puedes usar todas las ventajas mencionadas de objetos y pipelining en la programación de funciones para generar operaciones tan complejas como necesites.