Introducción a Exchange PowerShell

Por Daniel Seveso

Historia

Por años los administradores de Windows han dependido de la interfaz gráfica para tareas de administración. La interfaz gráfica, si bien es intuitiva y directa, limita la administración en el sentido que solo provee la información para la cual fue diseñada. En el centro de soporte, recibimos habitualmente llamados de administradores que necesitan determinado tipo de reportes, automatización de determinadas tareas, o simplemente información de directorio que no es accesible desde la interfase gráfica. La solución pre-PowerShell, es la utilización de una mezcla de tecnologías de scripting con interfases de acceso al directorio en la mayoría de los casos. Entonces tenemos mezclas de VbScript, JScript o incluso aplicaciones Visual Basic utilizando ADSI, DSDE, DSML, LDAP, DirectoryServices (.NET), etc.

Microsoft PowerShell provee en un solo concepto, comandos, herramientas y un lenguaje de scripting basado en objetos, que permite el control, administración y automatización de la plataforma, directamente desde la línea de comandos de Windows.

PowerShell en Exchange 2007 – El ambiente de Microsoft PowerShell, puede ser incluido como parte de otras aplicaciones, e instalado conjuntamente con extensiones para su administración. La instalación de Exchange 2007 integrará PowerShell con el nombre de Exchange Management Shell * . Lo llamaré EMS en adelante para ahorrar espacio. Estas extensiones incluyen comandos correspondientes con tareas de administración específicas como por ejemplo movimiento de mailboxes, creación de conectores, movimiento de storage groups, o aumento del logging de diagnóstico, por mencionar algunas.

Para Exchange 2007, la consola gráfica de administración está basada en EMS, cada operación ejecutada en la consola es traducida a su equivalente en EMS para ser llevada a cabo. Si ya has probado Exchange 2007 te habrás dado cuenta que la consola gráfica de administración presenta el comando equivalente EMS para cada operación.

Algunas Características – PowerShell expone acceso al modelo de objetos .NET y a sus propiedades y métodos asociados. EMS expone objetos de mensajería como mailboxes, base de datos, servidores, que permite escribir scripts y programar comandos de administración.

Es posible usar “pipelining” en el manejo de objetos, en el sentido de que los objetos correspondientes a la salida de un comando pueden utilizarse como entrada del siguiente comando simplemente usando el pipe “|”.

Mediante el uso de “Providers” EMS puede representar distintos repositorios del sistema como “drives”, por ejemplo la registry, certificate stores y variables de ambiente pueden ser accedidas como si fuesen discos.

Cada comando en EMS utiliza su propio parser, en lugar de depender de una interpretación textual global.

EMS permite también el uso de “Aliases” para simplificar la digitación de sus comandos.

Comandos – La unidad más pequeña de operación en PowerShell es llamada “cmdlet” (se pronuncia “command-let”) y es análogo a los comandos incluidos en Windows como DIR, COPY, etc.

Perfiles – EMS incluye un script especial que corre automáticamente cada vez que iniciamos la consola. En este script (Microsoft.Msh_profile.msh1) puedes iniciar tu ambiente, definir variables, aliases o correr cualquier comando o script cada vez que inicias la consola.

Obteniendo ayuda

Get-Help – Una vez que abrimos la consola, este es el primer cmdlet que debemos conocer. La ayuda de PowerShell se pide y se obtiene desde su propia consola. ¿Como obtengo ayuda sobre la ayuda? Simplemente ejecutando Get-Help sin parámetros. El Alias Help y el “ -? ” luego de un cmdlet, pueden utilizarse también para obtener ayuda.

EMS provee dos tipos de ayuda: Información general e información específica para cada cmdlet.

Para obtener ayuda sobre información general podemos ejecutar Get-Help about_< tópico > donde encontraremos la información relativa a ese tópico, como por ej. Arrays, Flow control, Providers, etc. Para ver todos los temas disponibles en la ayuda de información general puedes ejecutar Get-Help about.

Para obtener ayuda específica sobre un cmdlet, ejecutas Get-Help < cmdlet > . Por ejemplo Get-Help Get-Mailbox, te proveerá toda la ayuda disponible sobre el comando Get-Mailbox incluyendo una breve descripción, una descripción detallada, la sintaxis, la lista de parámetros disponibles y ejemplos de uso.

Puedes obtener ayuda usando comodines (*, ?, [a-z], [az]) lo que es útil cuando no recuerdas el nombre del cmdlet pero sabes a lo que se refiere.

Por ejemplo Get-Help *database* traerá todos los cmdlets que contengan database en su nombre: Mount-Database, Dismount-Database, Clean-MailboxDatabase, Get-MailboxDatabase… etc.

Get-Command – Este cmdlet provee ayuda específica para cada comando, incluyendo nombre, sintaxis y archivo de ayuda asociado. Utilizamos Get-Command cuando queremos recordar cual es la sintaxis del comando cuando ya lo conocemos, y utilizamos Get-Help para aprender como se usa un comando.

Cmdlets

Todos los cmdlets siguen la estructura verbo-nombre. Como en el idioma español, el verbo refiere a la acción que tomará el comando por ejemplo “Get” (obtener) o “Set” para modificar un valor. Si sabes inglés, te será muy fácil predecir que acción tomará un comando.

El nombre refiere al objeto sobre el cual se tomará la acción del verbo. Por ejemplo Get-Maibox obtendrá la lista de mailboxes y sus propiedades.

Reglas – Algunas de las reglas de verbo-nombre en cmdlets:

- Verbo-nombre serán siempre separados por el signo de “-“ sin espacios

- Nombre tiene siempre la forma singular, nunca plural

- Verbo-nombre no distingue entre mayúsculas y minúsculas

- Si se omite el verbo, la operación es será “Get” por omisión. (exceptuando Get-Command, porque si ejecutas Command obtendrás el shell cmd.exe del sistema operativo.

Parámetros - Los parámetros son pasados usando el signo de “-“ seguido del valor en la forma:

<Verbo>-<nombre> –<parámetro> <valor del parámetro>.

Puede haber información específica para cada parámetro en particular, especificando si el parámetro es requerido, si es posicional, si tiene un valor por omisión, si acepta comodines, etc. Esta información a cerca del parámetro es provista cuando consultas la ayuda con Get-Help <cmdlet>.

Tabulador para auto completar – Puedes usar el tabulador, para completar un comando o sus opciones mientras lo digitas

Con esta información tienes para empezar J, espero te sea de utilidad. Estaré escribiendo en las próximas semanas sobre el manejo de objetos y pipelining con PowerShell.

Si quieres comenzar a probar Exchage PowerShell usa los laboratorios virtuales de Technet

Referencias:

Windows PowerShell Website

Exchange Server 2007 Management Shell and Scripting (Level 300) Webcast

* Las aplicaciones mecionadas están en fase Beta al momento de escribir este artículo. Es posible que algunas denominaciones cambien cuando el producto sea lanzado al mercado.