Exchange Server 2007

Tome el control con el Shell de administración de Exchange

David Strome

 

Resumen:

  • Funcionamiento del Shell de administración de Exchange
  • Uso de los cmdlets
  • Diferencias entre los cmdlets y los comandos

Si administra un entorno de Exchange, seguro que ha oído decir que el nuevo Exchange Server 2007 incluye una nueva interfaz de línea de comandos denominada Shell de administración de Exchange. Basado en la tecnología de Microsoft Windows PowerShell, el Shell

de administración de Exchange es una eficaz interfaz de administración que se puede usar para administrar todos los aspectos de Exchange Server 2007 desde la línea de comandos. Desde allí, puede interactuar directamente con el Shell de administración de Exchange, escribir secuencias de comando para la automatización o integrar las aplicaciones con el motor subyacente. La figura 1 muestra el shell en acción.

Figura 1 Shell de administración de Exchange

Figura 1** Shell de administración de Exchange **(Hacer clic en la imagen para ampliarla)

La Consola de administración de Exchange no usa el Shell de administración de Exchange sólo para realizar operaciones, los asistentes muestran los comandos que dichas operaciones están ejecutando. Puede copiar los comandos creados mediante los asistentes y pegarlos directamente en la línea de comandos o en una secuencia de comandos. Cuando haya modificado los parámetros como desee, use el parámetro WhatIf para realizar una prueba de las secuencias de comandos o los comandos. Este parámetro permite ver los resultados antes de que se modifique el entorno.

El Shell de administración de Exchange proporciona una plataforma sólida y flexible que se puede integrar en las soluciones de secuencias de comandos existentes y que permite comunicarse de manera nativa con orígenes de datos como COM e Instrumental de administración de Windows (WMI). Basado en.NET Framework, el Shell de administración de Exchange usa cmdlets, la unidad de funcionalidad más pequeña del Shell, para aceptar y devolver datos estructurados en lugar de texto sin formato. Examinaremos los cmdlets más adelante con más detalle.

Complemento de Windows PowerShell

El primer paso para comprender el Shell de administración de Exchange es mirar cómo se relaciona con Windows PowerShell™, una eficaz y flexible interfaz de línea de comandos basada en .NET Framework. Ésta combina las mejores características de varios otros shells y agrega un gran número de características adicionales. Windows PowerShell está diseñado para funcionar como host de otras aplicaciones, muy parecido a la forma en que la Consola de administración de Microsoft (MMC) funciona como host para los distintos complementos suministrados con las aplicaciones. El Shell de administración de Exchange es el primer complemento de Windows PowerShell que se lanzará.

Los complementos son recopilaciones de cmdlets que se usan para administrar una aplicación o un componente principal. Si no los carga primero, no podrá usarlos. Afortunadamente, el complemento del Shell de administración de Exchange es muy fácil de iniciar. Pero antes de describir este proceso, debería explicar algunos conceptos clave que deberá comprender al leer este artículo y usar el Shell de administración de Exchange.

Cmdlets Los cmdlets parecen comandos incorporados en otros shells; por ejemplo, el comando dir del programa cmd.exe. Al igual que estos comandos conocidos, los cmdlets se pueden invocar directamente desde la línea de comandos del Shell de administración de Exchange y ejecutar bajo el contexto del shell, no como un proceso independiente. A diferencia de los comandos de otros shells, los cmdlets llevan nombres descriptivos tipo verbo-objeto. El verbo describe la acción que realiza el cmdlet y el objeto describe el componente o la función sobre la que se realizará la acción.

De este modo, no es necesario adivinar lo que hace un cmdlet. Cuando vea el cmdlet Move-Mailbox, sabrá que se usa para mover el buzón.

Para conocer cómo los cmdlets difieren de comandos normales, consulte la barra lateral "Diferencias entre los cmdlets y los comandos", que proviene de la sección .NET Framework 3.0 del SDK de Windows® y se encuentra en windowssdk.msdn.microsoft.com/en-us/library/ms714395.aspx.

Parámetro de identidad y posición El parámetro Identity (Identidad) puede usarse en la mayoría de los cmdlets relacionados con Exchange. Éste proporciona acceso a los identificadores únicos que hacen referencia a un objeto en particular en Exchange Server 2007 para poder realizar acciones en dicho objeto de Exchange específico mediante el valor único que más sentido tenga para el usuario.

El parámetro Identiy es una recopilación de valores de otros parámetros. Se garantiza que estos parámetros son únicos en un conjunto de objetos. Los valores de estos otros parámetros, por ejemplo Name y DistinguishedName, se pueden especificar o bien generarse mediante el sistema como, por ejemplo, un GUID. Los parámetros adicionales que se usen, si los hay, y cómo se completan, depende del objeto al que se hace referencia.

El parámetro Identiy también se considera como un parámetro de posición, es decir, un parámetro que permite especificar su valor sin especificar su nombre. Un parámetro es de posición si el atributo Parameter Position es un número entero. Este número entero indica la posición en la línea de comandos en la que el cmdlet encontrará el valor del parámetro. Dado que Identity es un parámetro de posición que reside en la posición 0, que es la primera posición, cualquier valor especificado en esta posición sin el nombre del parámetro se considerará como un valor del parámetro Identity. De este modo, se reduce el número de pulsaciones de teclas al escribir los comandos. Por ejemplo,

Get-Mailbox –Identity "Kim Akers" 

realiza la misma acción que:

Get-Mailbox "Kim Akers"

Canalización La canalización en el Shell de administración de Exchange es el hecho de que un cmdlet usa el resultado de otro cmdlet cuando realiza una operación. La canalización se efectúa mediante el símbolo de barra vertical "|". Todos los verbos en el mismo conjunto nombre-cmdlet pueden usar la información canalizada de otro comando. Algunos conjuntos nombre-cmdlet permiten pasar datos a través de la canalización a otro conjunto nombre-cmdlet.

El uso de la canalización para encadenar las acciones de dos o más cmdlets permite convertir componentes de menor tamaño en elementos más eficaces. Por ejemplo, puede usar un cmdlet para recopilar datos, pasar dichos datos a un segundo cmdlet para filtrarlos en un subconjunto y, a continuación, pasar dichos datos hacia un tercer cmdlet para que actúe solamente sobre el subconjunto.

Inicio del Shell de administración de Exchange

La manera más sencilla de cargar el shell es haciendo clic en Inicio, Programas, Microsoft Exchange Server 2007. A continuación, seleccione Shell de administración de Exchange.

La segunda manera de cargar el complemento del Shell de administración de Exchange es manualmente desde una sesión de Windows PowerShell. Haga clic en Inicio, Programas y, a continuación, seleccione Windows PowerShell. Una vez iniciado, ejecute el comando siguiente para cargar el Shell de administración de Exchange:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin

Existen algunas diferencias entre cargar el complemento del Shell de administración de Exchange mediante el menú Programas e iniciarlo manualmente mediante el cmdlet Add-PSSnapin. Cuando se usa el menú Programas, no solamente se carga el complemento del Shell de administración de Exchange, sino que también se ejecuta una secuencia de comandos de Windows PowerShell para configurar un entorno de administración de Exchange personalizado. Si desea configurar un entorno de administración similar tras la carga manual del Shell de administración de Exchange, cambie al directorio bin de instalación de Exchange. Por ejemplo, C:\Archivos de programa\Microsoft\Exchange Server\Bin. A continuación, ejecute el comando siguiente:

.\Exchange.ps1

Consulte la secuencia de comandos Exchange.ps1 para ver cómo personalizar el entorno de Windows PowerShell para que se adapte a sus necesidades. Al cargar el Shell de administración de Exchange, verá algo parecido a lo que se muestra en la figura 2.

Figura 2 Encabezado de bienvenida del Shell de administración de Exchange

Figura 2** Encabezado de bienvenida del Shell de administración de Exchange **(Hacer clic en la imagen para ampliarla)

¿Por dónde comenzar?

Dado que el shell dispone de una gama tan amplia de cmdlets, el cmdlet Get-Help y el archivo de ayuda de Exchange Server 2007 serán recursos muy valiosos. La sección de operaciones del archivo de ayuda de Exchange Server 2007 proporciona docenas de procedimientos para llevar a cabo la mayoría de las tareas de administración.

Si escribe sólo Get-Help, aparecerá la información de ayuda general sobre cómo obtener ayuda. Para obtener ayuda sobre un cmdlet en particular, escriba Get-Help seguido del cmdlet acerca del que desea obtener información. Para controlar la información presentada, use los parámetros Detailed, Full y Example. Simplemente agréguelos al final del comando. Por ejemplo, Get-Help nombre cmdlet –Full devuelve todas las secciones de ayuda disponibles para un cmdlet en particular.

Si desea recuperar información sobre uno o varios parámetros de un cmdlet, puede usar el parámetro Parameters con Get-Help. Por lo tanto, si desea ver todos los parámetros del cmdlet Set-Mailbox que contienen la palabra "quota" y sus descripciones, use el comando:

Get-Help Set-Mailbox –Parameter *quota*

Es posible que desee ver una lista de los cmdlets que administran una función de servidor específica o una característica de componente en particular o bien que afecta a los objetos en un alcance determinado de funcionalidad. El cmdlet Get-Help permite realizar esta operación mediante tres parámetros: Role, Component y Functionality. Cuando el cmdlet Get-Help se usa con estos parámetros, deberá escribir los valores que especifique con dichos parámetros entre caracteres de comodín ("*"). A continuación se incluyen algunos ejemplos de cómo invocar Get-Help con cada parámetro:

Get-Help -Role *Mailbox*
Get-Help -Component *Recipient*
Get-Help -Functionality *Server*

Si desea obtener más información, consulte el tema "Obtener ayuda" del archivo de ayuda de Exchange Server 2007 para obtener una lista de los valores de función, componente y funcionalidad que se pueden usar.

Formato del resultado de los comandos

De manera predeterminada, cuando la salida aparece en pantalla, el Shell de administración de Exchange solamente muestra un subconjunto de las propiedades disponibles para cada objeto. Sin embargo, puede obtener acceso fácilmente a todas las propiedades canalizando el resultado de un comando hacia los tres cmdlets de formato: Format-List, Format-Table y Format-Wide. Es probable que use Format-List y Format-Table con frecuencia, por lo que hablaré sobre éstos.

El cmdlet Format-List toma el resultado de la canalización y proporciona una lista de columnas verticales de todas las propiedades especificadas de cada objeto. Puede especificar las propiedades que desee visualizar mediante el parámetro Property, aunque este parámetro es un parámetro de posición, lo que significa que sólo es necesario especificar los valores y no el nombre. Si se invoca el cmdlet Format-List sin especificar ningún parámetro, se proporcionarán todas las propiedades. Este cmdlet ajusta las líneas en lugar de truncarlas. Uno de los mejores usos de Format-List es para anular el resultado predeterminado de un cmdlet para poder recuperar información adicional o más detallada. Por ejemplo,

Get-DistributionGroup | Format-List Name, *OnlyFrom, 
PrimarySmtpAddress, *Size*

La figura 3 muestra el resultado de este comando.

Figura 3 Ejemplo del resultado de Format-List

Figura 3** Ejemplo del resultado de Format-List **(Hacer clic en la imagen para ampliarla)

El cmdlet Format-Table permite mostrar los elementos en forma de tabla con encabezados de etiqueta y columnas de datos de propiedad. De manera predeterminada, un gran número de cmdlets, como por ejemplo, Get-Mailbox y Get-JournalRule, usan el formato de tabla para el resultado. Entre los parámetros del cmdlet Format-Table se incluyen Properties y GroupBy. Éstos funcionan exactamente del mismo modo que con el cmdlet Format-List. Para que líneas largas de información de propiedad se muestren completamente en lugar de truncarse al final de una línea, use el parámetro Wrap del modo siguiente:

Get-Mailbox –Database Research | Format-Table Name, 
ProhibitSendQuota, Database –Wrap 

Consulte la figura 4 para ver el resultado.

Figura 4 Ejemplos del resultado de Format-Table

Figura 4** Ejemplos del resultado de Format-Table **(Hacer clic en la imagen para ampliarla)

Si incluye un carácter comodín, puede hacer coincidir varias propiedades sin tener que escribir cada nombre de propiedad de manera individual. Por ejemplo, lo siguiente devuelve todas las propiedades que comienzan con E-mail.

Get-Mailbox | Format-List Email* 

Pongámoslo en práctica

Ahora que ha aprendido algunos comandos básicos, puede ejecutar los ejemplos siguientes. Estos ejemplos muestran la eficacia y flexibilidad del Shell de administración de Exchange y permiten poner en práctica algunos comandos.

Con el primer comando creará 10 usuarios, denominados de User1 a User10:

1..10 | ForEach { Net User "User$_" MyPassword=01 /ADD 
/Domain; Enable-Mailbox "User$_" -Database "Mailbox 
Database" }

Analicemos las secciones. El comando 1.0 da como resultado los números enteros de 1 a 10 y los canaliza hacia el cmdlet ForEach. El cmdlet ForEach actúa sobre cada objeto a medida que lo recibe y ejecuta los comandos dentro de las llaves { } para cada objeto. El comando Net User crea un nuevo usuario de dominio y el cmdlet Enable-Mailbox crea un buzón nuevo en la base de datos de buzones ("Mailbox Database") del servidor local. El punto y coma (;) separa los dos comandos para que se puedan colocar en la misma línea de comandos. La variable $_ es una variable especial que contiene el valor del objeto actual en la canalización. En este ejemplo, la variable $_ contiene el número entero que se encuentra actualmente en la canalización.

El siguiente ejemplo permitirá visualizar los buzones que residen en el servidor MBX y devolver las propiedades de nombre, base de datos de buzones y cuota de todos los buzones.

Get-Mailbox –Server MBX | Format-Table 
Name,Database,*quota*

El cmdlet Get-Mailbox devuelve todos los buzones especificados con el parámetro Server y, a continuación, canaliza el resultado de cada objeto de buzón al cmdlet Format-Table. De forma predeterminada, el cmdlet Format-Table muestra todas las propiedades que devuelve un cmdlet, a menos que se especifiquen las propiedades que se deben mostrar. Aquí, se solicitan solamente las propiedades de nombre y base de datos, así como todas las propiedades que contienen la cadena "quota". La figura 5 muestra el aspecto de este resultado.

Figura 5 Resultado del comando Get-Mailbox

Figura 5** Resultado del comando Get-Mailbox **(Hacer clic en la imagen para ampliarla)

En este ejemplo, establecerá el límite de cuota de envío en 600 MB para todos los usuarios de la organización habilitados para correo y que tienen el título de gerente (Manager).

Get-User –Filter { Title –Like "*Manager*"} 
–RecipientTypeDetails UserMailbox | Set-Mailbox 
–ProhibitSendQuota 600MB

Cuando se ejecuta solo, el cmdlet Get-User devuelve todos los objetos de usuario de Active Directory, incluidos los usuarios que no tienen el buzón habilitado. Para recuperar un conjunto de objetos de usuario que el cmdlet Set-Mailbox pueda usar, deberá indicarle al cmdlet Get-User que devuelva sólo los objetos de usuario de Active Directory que sean usuarios habilitados para correo. El parámetro RecipientTypeDetails permite especificar el tipo de destinatario de Active Directory; en este caso, UserMailbox. A continuación, debe recuperar un conjunto de usuarios habilitados para correo con el título de gerente. En este ejemplo, se completa la propiedad Title de cada objeto de usuario de Active Directory. Puede usar este valor para determinar los usuarios que son gerentes mediante el parámetro Filter, que indica al servidor que devuelva solamente los objetos de Active Directory que coincidan con sus criterios. Esto se denomina filtrado desde el servidor. Cuando haya obtenido un conjunto de objetos, éste se canaliza hacia el cmdlet Set-Mailbox, que establece la propiedad ProhibitSendQuota de cada buzón en 600 MB.

A continuación, realizaremos una prueba del resultado de un comando para quitar todos los buzones que pertenecen a un grupo de distribución. El comando es el siguiente:

Get-DistributionGroupMember "Fourth Year Students" |
 Where { $_.RecipientType –Eq "UserMailbox" } | Remove-
 Mailbox -WhatIf

El primer cmdlet recupera los objetos de destinatario que pertenecen al grupo de distribución Fourth Year Students. A continuación, únicamente los objetos de destinatario que coincidan con la propiedad RecipientType de "UserMailbox" se canalizan hacia el cmdlet Remove-Mailbox. En lugar de quitar los buzones, el cmdlet Remove-Mailbox mostrará la acción que hubiera llevado a cabo y los objetos sobre los que hubiera actuado. El cmdlet Get-DistributionGroupMember recupera una lista de todos los objetos de destinatario que pertenecen al grupo de distribución "Fourth Year Students". Sin embargo, dado que el cmdlet Remove-Mailbox sólo puede funcionar con usuarios habilitados para correo, deberá filtrar todos los tipos de destinatario excepto "UserMailbox". A diferencia de otros cmdlets, el cmdlet Get-DistributionGroupMember no dispone del cmdlet Filter, lo que significa que no puede realizar el filtrado desde el servidor. Para los cmdlets que no pueden realizar el filtrado desde el servidor (debido a que no proporciona ninguna ventaja de rendimiento), puede usar el cmdlet Where para realizar un filtrado desde el cliente, lo que recupera todos los objetos y realiza el filtrado en el equipo cliente local. El cmdlet Where sólo permite canalizar objetos que coincidan con los criterios especificados. Los objetos con la propiedad RecipientType de "UserMailbox" se envían al cmdlet Remove-Mailbox. Este cmdlet quita los objetos de usuario de Active Directory y marca el buzón para su eliminación. Cuando se usa el parámetro WhatIf, el cmdlet Remove-Mailbox muestra texto similar al siguiente:

What if: Removing the Mailbox "contoso.com/Users
/user10" will remove the Windows user object and mark 
the mailbox in the database for removal.

Si está satisfecho que el comando realice las acciones deseadas, vuelva a ejecutar el comando sin WhatIf. Para algunos cmdlets, como por ejemplo, los que llevan el verbo Remove, el shell solicitará automáticamente confirmación antes de realizar cualquier cambio. Tiene la opción de pasar por cada cambio, indicarle al shell que no debe solicitar confirmación o cancelar todo procesamiento subsiguiente. Para los cmdlets que no implementan la confirmación automáticamente, puede forzarla mediante el parámetro Confirm.

Conclusión

Ahora que ha probado la eficacia de los cmdlets, estará listo para experimentarlo por sí mismo y ver hasta qué punto tanto el Shell de administración de Exchange como Microsoft Windows PowerShell le ayudarán en las tareas futuras de administración de sistemas. Si desea obtener más información sobre ambos temas, consulte los recursos siguientes. En el caso del Shell de administración, consulte el archivo de ayuda de Exchange Server 2007 en la dirección go.microsoft.com/fwlink/?LinkId=69434, el centro de secuencias de comandos de Windows Powershell en la dirección go.microsoft.com/fwlink/?LinkId=71134 y el blog del equipo de Exchange en la dirección msexchangeteam.com.

David Strome es escritor técnico del grupo Exchange User Education en Microsoft desde hace poco más de un año. Antes de unirse a Microsoft en Redmond, WA, David pasó aproximadamente diez años diseñando, implementando y administrando instalaciones de Exchange Server en distintas empresas en British Columbia, Canadá. Puede ponerse en contacto con él en la dirección dstrome@microsoft.com.

© 2008 Microsoft Corporation and CMP Media, LLC. Reservados todos los derechos; queda prohibida la reproducción parcial o total sin previa autorización.