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.


 

Comments (0)