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.