Scripting con el Shell de administración de Exchange

 

Se aplica a: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

Última modificación del tema: 2009-12-18

Para las tareas más generales, es suficiente ejecutar cmdlets de uno en uno o juntos a través de canales. Sin embargo, en ocasiones es conveniente automatizar las tareas. El Shell de administración de Exchange es compatible con un lenguaje de secuencias de comandos muy rico basado en Microsoft .NET Framework, que se parece al lenguaje de secuencias de comandos de otros Shells. El Shell de administración de Exchange le permite crear secuencias de comandos tanto muy sencillas como muy complejas. Se permiten las construcciones de bucles, de condiciones, de control de flujo y de asignaciones de variables.

En todas las organizaciones hay tareas que, de algún modo, son exclusivas de esa organización. Si los administradores disponen de una biblioteca de archivos de secuencias de comandos para realizar esas tareas, pueden ahorrar tiempo y ejecutar estas secuencias de comandos en cualquier equipo que tenga instalado el Shell de administración de Exchange.

Para obtener más información acerca de cómo utilizar las secuencias de comandos, vea Scripting with Windows PowerShell (en inglés). Dado que el Shell de administración de Exchange está incorporado en la tecnología Microsoft WindowsPowerShell, la guía de secuencias de comandos de Windows PowerShell se aplica al Shell de administración de Exchange.

Ejecución de un script en el Shell de administración de Exchange

Quienes estén familiarizados con el entorno Cmd.exe saben cómo ejecutar scripts del shell de comandos. Tan sólo son archivos de texto que tienen la extensión .bat. Al igual que los archivos por lotes, puede crear archivos de secuencias de comandos del Shell de administración de Exchange con un editor de texto, como el Bloc de notas. Los archivos de secuencias de comandos del Shell de administración de Exchange utilizan la extensión de archivo .ps1.

El Shell de administración de Exchange utiliza un directorio raíz para los archivos de secuencias de comandos cuando se les llama. De manera predeterminada, el directorio raíz es el directorio <root drive>:\Program Files\Microsoft\Exchange Server\bin. También puede comprobar el directorio de PSHome actual en cualquier equipo que ejecute el Shell de administración de Exchange ejecutando $PSHome desde la línea de comandos. Ambos directorios se encuentran en la variable de entorno PATH.

Si se guarda un archivo de script en el directorio raíz, puede llamarlo con el nombre del script. Si el archivo de script se encuentra en algún lugar que no sea la ubicación actual, se debe utilizar el nombre del script y la ruta de acceso. Si el archivo de script se encuentra en la ubicación actual, hay que colocar .\ delante del nombre del script.

Los ejemplos siguientes muestran los requisitos de la sintaxis de los comandos para llamar a tres secuencias de comandos diferentes. En todos estos ejemplos, se utiliza el cmdlet Get-Date desde tres ubicaciones diferentes.

[PS] C:\>Get-Date-Script-A.ps1
Friday, January 20, 2006 3:13:01 PM

El archivo de script Get-Date-Script-A.ps1 se encuentra en el directorio que especifica $PSHhome y, para ejecutarlo, sólo se necesita el nombre de la secuencia de comandos.

[PS] C:\>c:\workingfolder\Get-Date-Script-B.ps1
Friday, January 20, 2006 3:13:25 PM

El archivo de script Get-Date-Script-B.ps1 se encuentra en el directorio C:\workingfolder, por lo que se debe introducir la ruta de acceso completa para ejecutarlo.

[PS] C:\>.\Get-Date-Script-C.ps1
Friday, January 20, 2006 3:13:40 PM

El archivo de script Get-Date-Script-C.ps1 se encuentra en la ubicación actual, C:\. Por lo tanto, se le debe adjuntar el prefijo .\ para ejecutarlo.

[PS] C:\>Get-Date-Script-C.ps1
'Get-Date-Script-C.ps1' is not recognized as a Cmdlet, function, operable program, or script file.
At line:1 char:21
+ Get-Date-Script-C.ps1 <<<<

En el último ejemplo, se muestran los resultados obtenidos cuando se llama a este mismo script, Get-Date-Script-C.ps1,, sin el prefijo .\.

Es recomendable dar siempre a los archivos de script un nombre descriptivo e incluir comentarios en ellos para describir su finalidad e identificar cada punto de interés. También se debería incluir alguna información acerca del autor, en caso de que alguien que ejecute el script tenga alguna duda sobre su uso. Utilice el símbolo de la libra (#) para comenzar las líneas de comentarios en el cuerpo del script.

Ejecución de un script desde Cmd.exe

Si desea ejecutar un script de manera programada por medio del servicio Programador de tareas de Windows, puede llamar al Shell de administración de Exchange e incluir el script que desea ejecutar como un parámetro. Dado que el Shell de administración de Exchange es un complemento de Windows PowerShell, también debe cargar el complemento Shell de administración de Exchange al ejecutar el comando con el fin de ejecutar cualquier cmdlet relacionado con Exchange. Hay que utilizar la sintaxis siguiente para cargar el complemento Shell de administración de Exchange y ejecutar el script desde el comando Cmd.exe:

PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\Bin\ExShell.Psc1" -Command ". '<Path to Your Script>'"

Por ejemplo, para ejecutar el script RetrieveMailboxes.ps1 desde C:\My Scripts, utilice el comando siguiente:

PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\Bin\ExShell.Psc1" -Command ". 'C:\My Scripts\RetrieveMailboxes.ps1'"

Para disponer de opciones adicionales al llamar al Shell de administración de Exchange desde el entorno de Cmd.exe, escriba PowerShell.exe /?.

Obtención de sugerencias desde la Consola de administración de Exchange

En Microsoft Exchange Server 2007, puede utilizar la Consola de administración de Exchange para ver información detallada acerca de comandos del Shell de administración de Exchange específicos que se utilizan para realizar determinadas tareas. Cuando se ejecuta un asistente en la Consola de administración de Exchange, el asistente toma la información introducida y crea un comando del Shell de administración de Exchange que luego ejecuta el equipo. Puede copiar y pegar este comando directamente en el Shell de administración de Exchange o copiarlo en un editor de texto, donde puede modificarlo. Si examina la forma en la que la Consola de administración de Exchange crea comandos, puede comprender mejor cómo se construyen o modifican esos comandos con el fin de satisfacer sus necesidades futuras.

Por ejemplo, si crea un buzón nuevo para una persona llamada Frank Lee, la información siguiente aparece en la página Finalización del Asistente para buzón nuevo:

Figura 1   Página Finalización del Asistente para buzón nuevo

Nueva página Finalización de buzón de correo

La información que se muestra en la página Finalización le da una idea de la información que debe tener para asegurarse de que se completa correctamente un comando similar al que ejecuta en el Shell de administración de Exchange. En la página Finalización, presione CTRL+C para copiar esta información en el portapapeles. A continuación, puede utilizar un editor de texto para examinar el comando y determinar qué hay que cambiar para agregar más buzones. También puede personalizar el comando para poder utilizarlo como parte de un script que consuma un archivo de valores separados por comas (CSV) u otro origen de entrada para automatizar la creación de muchos buzones.

Prueba de secuencias de comandos

Al crear nuevas secuencias de comandos, siempre debería probarlos en un entorno de laboratorio antes de aplicarlos en su entorno de producción. Mientras prueba las secuencias de comandos en su laboratorio y mientras los implementa en su entorno de producción, puede utilizar el parámetro WhatIf que está disponible en muchos cmdlets que se incluyen en el Shell de administración de Exchange para comprobar que las secuencias de comandos se comportan de la manera esperada. El parámetro WhatIf da la instrucción de ejecutarse al comando al que se aplica, pero sólo muestra qué objetos resultarían afectados por el comando y qué cambios habría que realizar en esos objetos sin cambiar realmente ninguno de esos objetos.

Para obtener más información acerca del parámetro WhatIf, vea Parámetros WhatIf, Confirm y ValidateOnly (en inglés).

Solución de problemas de secuencias de comandos

Puede que las secuencias de comandos no funcionen por muchas razones. Puede ser difícil determinar dónde está el problema y qué es lo que funciona mal. El Shell de administración de Exchange puede ayudarle a localizar errores de sintaxis generales al informarle dónde está la línea y el carácter en el que se ha producido el error. Si la sintaxis de un script es correcta, pero el comportamiento es inesperado, puede ser mucho más difícil diagnosticar el problema. El Shell de administración de Exchange incluye una funcionalidad de depuración sencilla para solucionar los problemas de los archivos de script con la que se examina cada paso que da el script cuando se ejecuta. Esta funcionalidad se denomina seguimiento.

Para habilitar el seguimiento y examinar todos los pasos del comando en un script, utilice el cmdlet Set-PSDebug con el parámetro Trace establecido en el valor 1. Para examinar cada paso y cada asignación de variables a medida que se van produciendo, establezca el parámetro Trace en el valor 2. Para desactivar el seguimiento, establezca el valor del parámetro Trace en 0 (cero).

Para examinar cada comando de un script línea por línea, utilice el cmdlet Set-PSDebug con el parámetro Step. En cada paso, se le pedirá que continúe la operación. En el modo Step, están disponibles las opciones siguientes:

[Y] Yes (continue to the next step)
[A] Yes to All (continue to the end of the script)
[N] No (stop this step)
[L] No to All (stop all remaining steps)
[S] Suspend (suspend at this point and drop to a prompt)

Suspend le permite salir a un mensaje en el que puede ejecutar cualquier comando, por ejemplo, para comprobar o establecer valores en un objeto antes de que el script tenga acceso a él. Cuando esté preparado para continuar la ejecución del script, escriba Exit y el control regresará inmediatamente al punto en el que se interrumpió el script.