Compartir a través de


Trabajar con salidas de comandos

Se aplica a: Exchange Server 2013

El Shell de administración de Exchange ofrece varios métodos que puede usar para dar formato a la salida de comandos. En este tema se explican los siguientes asuntos:

  • Cómo dar formato a datos Controlar el formato de los datos que se ven mediante los cmdlets Format-List, Format-Table y Format-Wide.

  • Cómo dar salida a los datos Determinar si la salida de los datos se realiza en la ventana de la consola del Shell o en un archivo mediante los cmdlets Out-Host y Out-File. En este tema se incluye un script de ejemplo para enviar datos a Microsoft Internet Explorer.

  • Cómo filtrar datos Filtrar datos utilizando cualquiera de los siguientes métodos de filtrado:

    • Filtrado del servidor, disponible en determinados cmdlets.

    • Filtrado del cliente, disponible en todos los cmdlets canalizando los resultados de un comando al cmdlet Where-Object.

Para usar la funcionalidad descrita en este tema, debe estar familiarizado con los siguientes conceptos:

Cómo dar formato a datos

Si llama a cmdlets de formato al final del canal, puede invalidar el formato predeterminado para controlar qué datos se muestran y cómo aparecen dichos datos. Los cmdlets de formato son Format-List, Format-Table y Format-Wide. Cada uno de ellos tiene su propio estilo de salida particular que difiere de los restantes cmdlets de formato.

Format-List

El cmdlet Format-List toma una entrada del canal y muestra como resultado una lista en columna vertical de todas las propiedades especificadas de cada objeto. Puede especificar qué propiedades desea mostrar mediante el parámetro Property . Si se llama al cmdlet Format-List sin especificar ningún parámetro, se muestran todas las propiedades. El cmdlet Format-List ajusta las líneas en lugar de truncarlas. Uno de los mejores usos que se le puede dar al cmdlet Format-List es el de invalidar la salida predeterminada de un cmdlet para que se pueda recuperar información adicional o más específica.

Por ejemplo, cuando se llama al cmdlet Get-Mailbox, solo se ve una cantidad de información limitada en un formato de tabla. Si se canaliza la salida del cmdlet Get-Mailbox al cmdlet Format-List y se agregan parámetros para la información adicional o más específica que se desea visualizar, se puede recuperar el resultado deseado.

También puede especificar un carácter comodín "*" con un nombre de propiedad parcial. Si incluye un carácter comodín, puede hacer coincidir varias propiedades sin tener que escribir el nombre de cada propiedad individualmente. Por ejemplo, Get-Mailbox | Format-List -Property Email* devuelve todas las propiedades que comienzan por Email.

Los ejemplos siguientes muestran las distintas formas de ver los mismos datos devueltos por el cmdlet Get-Mailbox.

Get-Mailbox TestUser1

Name                      Alias                ServerName       ProhibitSendQuota
----                      -----                ----------       ---------------
TestUser1                 TestUser1            mbx              unlimited

En el primer ejemplo, se llama al cmdlet Get-Mailbox sin ningún formato específico para que la salida predeterminada se realice en formato de tabla y contenga un conjunto predeterminado de propiedades.

Get-Mailbox TestUser1 | Format-List -Property Name,Alias,EmailAddresses

Name           : TestUser1
Alias          : TestUser1
EmailAddresses : {SMTP:TestUser1@contoso.com}

En el segundo ejemplo, la salida del cmdlet Get-Mailbox se canaliza al cmdlet Format-List, junto con propiedades específicas. Como puede ver, el formato y el contenido del resultado son notablemente distintos.

Get-Mailbox TestUser1 | Format-List -Property Name, Alias, Email*
Name                      : Test User
Alias                     : TestUser1
EmailAddresses            : {SMTP:TestUser1@contoso.com}
EmailAddressPolicyEnabled : True

En el último ejemplo, la salida del cmdlet Get-Mailbox se canaliza al cmdlet Format-List como en el segundo ejemplo. Sin embargo, en el último ejemplo, se usa un carácter comodín para que coincida con todas las propiedades que comienzan por Email.

Si se pasa más de un objeto al cmdlet Format-List, todas las propiedades especificadas para un objeto se muestran y se agrupan por objeto. El orden de visualización depende del parámetro predeterminado del cmdlet. El parámetro predeterminado es con más frecuencia el parámetro Name o el parámetro Identity . Por ejemplo, cuando se llama al cmdlet Get-Childitem, el orden de visualización predeterminado es por nombre de archivo en orden alfabético. Para cambiar este comportamiento, debe llamar al cmdlet Format-List , junto con el parámetro GroupBy y el nombre de un valor de propiedad por el que desea agrupar la salida. Por ejemplo, el siguiente comando enumera todos los archivos de un directorio y, luego, los agrupa según la extensión.

Get-Childitem | Format-List Name,Length -GroupBy Extension

Extension: .xml

Name   : Config_01.xml
Length : 5627

Name   : Config_02.xml
Length : 3901

Extension: .bmp

Name   : Image_01.bmp
Length : 746550

Name   : Image_02.bmp
Length : 746550

Extension: .txt

Name   : Text_01.txt
Length : 16822

Name   : Text_02.txt
Length : 9835

En este ejemplo, el cmdlet Format-List ha agrupado los elementos por la propiedad Extension especificada por el parámetro GroupBy . Puede usar el parámetro GroupBy con cualquier propiedad válida para los objetos en la secuencia de canalización.

Format-Table

El cmdlet Format-Table le permite mostrar elementos en un formato de tabla con encabezados etiquetados y columnas de datos de propiedad. De forma predeterminada, muchos cmdlets, por ejemplo, los cmdlets Get-Process y Get-Service, usan el formato de tabla para el resultado. Los parámetros del cmdlet Format-Table incluyen los parámetros Properties y GroupBy . Estos parámetros funcionan exactamente igual que lo harían con el cmdlet Format-List.

El cmdlet Format-Table también usa el parámetro Wrap . Este parámetro permite visualizar las líneas largas de información de propiedad de forma completa en lugar de truncarlas al final. Para ver cómo se usa el parámetro Wrap para mostrar la información devuelta, compare la salida del comando Get-Command en los dos ejemplos siguientes.

En el primer ejemplo, cuando se usa el cmdlet Get-Command para mostrar información de comandos sobre el cmdlet Get-Process , la información de la propiedad Definition se trunca.

Get-Command Get-Process | Format-Table Name,Definition

Name                                    Definition
----                                    ----------
get-process                             get-process [[-ProcessName] String[]...

En el segundo ejemplo, el parámetro Wrap se agrega al comando para forzar que se muestre el contenido completo de la propiedad Definition .

Get-Command Get-Process | Format-Table Name,Definition -Wrap

Get-Process                             Get-Process [[-Name] <String[]>] [-Comp
                                        uterName <String[]>] [-Module] [-FileVe
                                        rsionInfo] [-Verbose] [-Debug] [-ErrorA
                                        ction <ActionPreference>] [-WarningActi
                                        on <ActionPreference>] [-ErrorVariable
                                        <String>] [-WarningVariable <String>] [
                                        -OutVariable <String>] [-OutBuffer <Int
                                            32>]
                                        Get-Process -Id <Int32[]> [-ComputerNam
                                        e <String[]>] [-Module] [-FileVersionIn
                                        fo] [-Verbose] [-Debug] [-ErrorAction <
                                        ActionPreference>] [-WarningAction <Act
                                        ionPreference>] [-ErrorVariable <String
                                        >] [-WarningVariable <String>] [-OutVar
                                        iable <String>] [-OutBuffer <Int32>]
                                        Get-Process [-ComputerName <String[]>]
                                        [-Module] [-FileVersionInfo] -InputObje
                                        ct <Process[]> [-Verbose] [-Debug] [-Er
                                        rorAction <ActionPreference>] [-Warning
                                        Action <ActionPreference>] [-ErrorVaria
                                        ble <String>] [-WarningVariable <String
                                        >] [-OutVariable <String>] [-OutBuffer
                                        <Int32>]

Al igual que con el cmdlet Format-List , también puede especificar un carácter comodín "*" con un nombre de propiedad parcial. Al incluir un carácter comodín, puede hacer coincidir varias propiedades sin tener que escribir cada nombre de propiedad individualmente.

Format-Wide

El cmdlet Format-Wide permite un control de resultados mucho más simple que otros cmdlets de formato. De forma predeterminada, el cmdlet Format-Wide intenta mostrar tantas columnas de valores de propiedad como sea posible en una línea de resultado. Puede controlar el número de columnas y cómo se usa el espacio del resultado agregando parámetros.

Mediante el uso más básico, al llamar al cmdlet Format-Wide sin ningún parámetro, el resultado se organiza en una cantidad de columnas que se ajusta a la página. Por ejemplo, si ejecuta el cmdlet Get-Childitem y canaliza su resultado al cmdlet Format-Wide, verá la siguiente información:

Get-ChildItem | Format-Wide

Directory: FileSystem::C:\WorkingFolder

Config_01.xml                           Config_02.xml
Config_03.xml                           Config_04.xml
Config_05.xml                           Config_06.xml
Config_07.xml                           Config_08.xml
Config_09.xml                           Image_01.bmp
Image_02.bmp                            Image_03.bmp
Image_04.bmp                            Image_05.bmp
Image_06.bmp                            Text_01.txt
Text_02.txt                             Text_03.txt
Text_04.txt                             Text_05.txt
Text_06.txt                             Text_07.txt
Text_08.txt                             Text_09.txt
Text_10.txt                             Text_11.txt
Text_12.txt

Generalmente, al llamar al cmdlet Get-Childitem sin ningún parámetro, se muestran los nombres de todos los archivos del directorio en una tabla de propiedades. En este ejemplo, después de la canalización del resultado del cmdlet Get-Childitem al cmdlet Format-Wide, el resultado se mostró en dos columnas de nombres. Tenga en cuenta que solamente se puede mostrar un tipo de propiedad a la vez, y este debe estar especificado mediante el nombre de propiedad que sigue al cmdlet Format-Wide. Si agrega el parámetro Autosize , la salida cambia de dos columnas a tantas columnas como se ajusten al ancho de pantalla.

Get-ChildItem | Format-Wide -AutoSize

Directory: FileSystem::C:\WorkingFolder

Config_01.xml   Config_02.xml   Config_03.xml   Config_04.xml   Config_05.xml
Config_06.xml   Config_07.xml   Config_08.xml   Config_09.xml   Image_01.bmp
Image_02.bmp    Image_03.bmp    Image_04.bmp    Image_05.bmp    Image_06.bmp
Text_01.txt     Text_02.txt     Text_03.txt     Text_04.txt     Text_05.txt
Text_06.txt     Text_07.txt     Text_08.txt     Text_09.txt     Text_10.txt
Text_11.txt     Text_12.txt

En este ejemplo, la tabla se organiza en cinco columnas, en lugar de dos. El parámetro Column ofrece más control, ya que permite especificar el número máximo de columnas para mostrar información como se indica a continuación:

Get-ChildItem | Format-Wide -Column 4

Directory: FileSystem::C:\WorkingFolder

Config_01.xml       Config_02.xml       Config_03.xml       Config_04.xml
Config_05.xml       Config_06.xml       Config_07.xml       Config_08.xml
Config_09.xml       Image_01.bmp        Image_02.bmp        Image_03.bmp
Image_04.bmp        Image_05.bmp        Image_06.bmp        Text_01.txt
Text_02.txt         Text_03.txt         Text_04.txt         Text_05.txt
Text_06.txt         Text_07.txt         Text_08.txt         Text_09.txt
Text_10.txt         Text_11.txt         Text_12.txt

En este ejemplo, mediante el parámetro Column, el número de columnas no puede ser distinto de cuatro.

Cómo dar salida a los datos

Cmdlets Out-Host y Out-File

El cmdlet Out-Host es un cmdlet predeterminado no visto al final del canal. Después de aplicar todo el formato, el cmdlet Out-Host envía el resultado final a la ventana de consola para visualización. No tiene que llamar explícitamente al cmdlet Out-Host, dado que es el resultado predeterminado. Puede invalidar el envío del resultado a la ventana de consola llamando al cmdlet Out-File como último cmdlet del comando. El cmdlet Out-File escribe, a continuación, el resultado en el archivo que especifica en el comando, como se muestra en el ejemplo siguiente:

Get-ChildItem | Format-Wide -Column 4 | Out-File c:\OutputFile.txt

En este ejemplo, el cmdlet Out-File escribe la información que se muestra en el comando Get-ChildItem | Format-Wide -Column 4 en un archivo denominado OutputFile.txt. También puede redirigir la salida de la canalización a un archivo mediante el operador de redirección, que es el corchete angular derecho ( > ). Para anexar la salida de canalización de un comando a un archivo existente sin reemplazar el archivo original, use los dobles corchetes angulares de derecha ( >> ), como en el ejemplo siguiente:

Get-ChildItem | Format-Wide -Column 4 >> C:\OutputFile.txt

En este ejemplo, la salida del cmdlet Get-Childitem se canaliza al cmdlet Format-Wide para dar formato y, a continuación, se escribe al final del OutputFile.txt archivo. Tenga en cuenta que, si el OutputFile.txt archivo no existiera, el uso de los corchetes dobles de ángulo derecho ( >> ) crearía el archivo.

Para obtener más información sobre las canalizaciones, consulte about_Pipelines.

Para obtener más información acerca de la sintaxis utilizada en los ejemplos anteriores, vea Syntax.

Visualización de datos en Internet Explorer

Dada la flexibilidad y la facilidad de creación de scripting en el Shell de administración de Exchange, puede extraer los datos devueltos por los comandos y darles formato y salida de forma casi ilimitada.

El ejemplo siguiente muestra cómo se puede usar un script simple para enviar los datos devueltos por un comando y mostrarlos en Internet Explorer. Este script extrae los objetos que pasan por el canal, abre una ventana de Internet Explorer y ,a continuación, muestra los datos en Internet Explorer:

$Ie = New-Object -Com InternetExplorer.Application
$Ie.Navigate("about:blank")
While ($Ie.Busy) { Sleep 1 }
$Ie.Visible = $True
$Ie.Document.Write("$Input")
# If the previous line doesn't work on your system, uncomment the line below.
# $Ie.Document.IHtmlDocument2_Write("$Input")
$Ie

Para usar este script, guárdelo en el C:\Program Files\Microsoft\Exchange Server\V15\Scripts directorio del equipo donde se ejecutará el script. Asigne al archivo el nombre Out-Ie.ps1. Después de guardar el archivo, puede usar el script como un cmdlet normal.

Nota:

Para ejecutar scripts en Exchange 2013, éstos deben agregarse a un rol de administración sin ámbito y usted debe recibir la asignación de un rol de administración, ya sea directa o indirectamente, o mediante un grupo de roles de administración. Para obtener más información, consulte Descripción de los roles de administración.

El Out-Ie script supone que los datos que reciben son HTML válidos. Para convertir los datos que desea ver en código HTML, debe canalizar los resultados del comando al cmdlet ConvertTo-Html. A continuación, puede canalizar los resultados de ese comando al Out-Ie script. El siguiente ejemplo muestra cómo visualizar un listado de directorios en una ventana de Internet Explorer:

Get-ChildItem | Select Name,Length | ConvertTo-Html | Out-Ie

Cómo filtrar datos

El Shell ofrece acceso a una gran cantidad de información acerca de servidores, buzones, Active Directory y otros objetos de su organización. Aunque el acceso a esta información ayuda a comprender mejor el entorno, esta cantidad de información puede ser agobiante. El Shell le permite controlar esta información y solamente devuelve los datos que desea ver por medio del filtrado. Se dispone de los tipos de filtrado siguientes:

  • Filtrado del lado servidor: el filtrado del lado servidor toma el filtro que se especifica en la línea de comandos y lo envía al servidor de Exchange que se consulta. Dicho servidor procesa la consulta y devuelve solo los datos que coincidan con el filtro especificado.

    El filtrado del servidor solamente se lleva a cabo en objetos en los que se pueden devolver decenas o centenas de miles de resultados. Por tanto, solo los cmdlets de administración de destinatarios como, por ejemplo, el cmdlet Get-Mailbox, y los cmdlets de administración de colas como, por ejemplo, el cmdlet Get-Queue, son compatibles con el filtrado del servidor. Estos cmdlets admiten el parámetro Filter . Este parámetro toma la expresión del filtro que se especifica y la envía al servidor para que sea procesada.

  • Filtrado del lado cliente: el filtrado del lado cliente se realiza en los objetos de la ventana de consola local en la que está trabajando actualmente. Cuando se usa el filtrado del cliente, el cmdlet recupera todos los objetos que coinciden con la tarea que se está realizando en la ventana de consola local. Luego, el Shell toma todos los resultados devueltos, aplica el filtro del cliente a dichos resultados y devuelve solamente los resultados que coincidan con su filtro. Todos los cmdlets son compatibles con el filtrado del cliente. Éste se llama mediante la canalización de los resultados de un comando al cmdlet Where-Object.

Filtrado del servidor

La implementación del filtrado del servidor es específica del cmdlet en el que está admitido. El filtrado del servidor solamente se habilita sobre propiedades específicas en los objetos devueltos. Para obtener más información, consulte la ayuda de los cmdlets siguientes:

         
Get-ActiveSyncDevice Get-ActiveSyncDeviceClass Get-CASMailbox Get-Contact Get-DistributionGroup
Get-DynamicDistributionGroup Get-Group Get-Mailbox Get-MailboxStatistics Get-MailContact
Get-MailPublicFolder Get-MailUser Get-Message Get-MobileDevice Get-Queue
Get-QueueDigest Get-Recipient Get-RemoteMailbox Get-RoleGroup Get-SecurityPrincipal
Get-StoreUsageStatistics Get-UMMailbox Get-User Get-UserPhoto Remove-Message
Resume-Message Resume-Queue Retry-Queue Suspend-Message Suspend-Queue

Filtrado del cliente

El filtrado del cliente se puede usar con cualquier cmdlet. Esto incluye a aquéllos que son compatibles con el filtrado del servidor. Como se ha descrito anteriormente en este tema, el filtrado del cliente acepta todos los datos devueltos por un comando anterior en el canal y, a cambio, devuelve solo los resultados que coinciden con el filtro que se especifica. El cmdlet Where-Object realiza este filtrado. Where puede ser la forma abreviada.

Conforme los datos pasan por el canal, el cmdlet Where recibe los datos del objeto anterior y, a continuación, filtra los datos antes de pasarlos al siguiente objeto. El filtrado se basa en un bloque de script definido en el comando Where. El bloque de script filtra los datos basados en las propiedades y los valores del objeto.

El cmdlet Clear-Host se usa para borrar la ventana de consola. En este ejemplo, puede encontrar todos los alias definidos para el cmdlet Clear-Host si ejecuta el siguiente comando:

Get-Alias | Where {$_.Definition -eq "Clear-Host"}

CommandType     Name                            Definition
-----------     ----                            ----------
Alias           clear                           clear-host
Alias           cls                             clear-host

El cmdlet Get-Alias y el comando Where trabajan conjuntamente para devolver la lista de alias que se han definido solamente para el cmdlet Clear-Host. La siguiente tabla describe todos los elementos del comando Where que se usan en el ejemplo.

Elementos del comando Where

Elemento Descripción
{ } Las llaves delimitan el bloque de script que define al filtro.
$_ Esta variable especial se inicia automáticamente y se enlaza con los objetos del canal.
Definition La Definition propiedad es la propiedad de los objetos de canalización actuales que almacena el nombre de la definición de alias. Cuando Definition se usa con la $_ variable , un punto es anterior al nombre de la propiedad.
-eq Este operador de comparación para "igual que" se usa para especificar que el resultado debe coincidir exactamente con el valor de la propiedad que se suministra en la expresión.
"Clear-Host" En este ejemplo, "Clear-Host" es el valor para el que está analizando el comando.

En el ejemplo, los objetos devueltos por el cmdlet Get-Alias representan todos los alias definidos en el sistema. Incluso aunque no los vea desde la línea de comandos, los alias se recopilan y pasan al cmdlet Where a través del canal. El cmdlet Where usa la información en el bloque de script para aplicar un filtro a los objetos del alias.

La variable $especial _represents los objetos que se pasan. Shell $_inicia automáticamente la variable y se enlaza al objeto de canalización actual. Para obtener más información sobre esta variable especial, vea Variables de shell.

Mediante la notación "dot" estándar (object.property), la Definition propiedad se agrega para definir la propiedad exacta del objeto que se va a evaluar. A -eq continuación, el operador de comparación compara el valor de esta propiedad con "Clear-Host". Solo los objetos que tienen la Definition propiedad que coinciden con este criterio se pasan a la ventana de la consola para la salida. Para obtener más información sobre los operadores de comparación, vea Operadores de comparación.

Una vez que el comando Where ha filtrado los objetos devueltos por el cmdlet Get-Alias, se pueden canalizar los objetos filtrados a otro comando. El siguiente comando procesa solamente los objetos filtrados devueltos por el comando Where.