Redirección de la salida
PowerShell ofrece varios cmdlets que permiten controlar la salida de datos directamente. Estos cmdlets comparten dos características importantes.
En primer lugar, suelen transformar datos a algún formato de texto. Lo hacen para aplicar la salida de datos a componentes del sistema que la entrada de texto. Esto significa que deben representar los objetos como texto. Por lo tanto, el texto tiene el formato que puede ver en la ventana de la consola de PowerShell.
En segundo lugar, estos cmdlets usan el verbo Out de PowerShell porque envían información fuera de Windows PowerShell a alguna otra ubicación.
Salida de consola
De manera predeterminada, PowerShell envía datos a la ventana de host, que es exactamente lo que hace el cmdlet Out-Host
. El uso principal del cmdlet Out-Host
es la paginación. Por ejemplo, el comando siguiente usa Out-Host
para paginar la salida del cmdlet Get-Command
:
Get-Command | Out-Host -Paging
La pantalla de la ventana de host se encuentra fuera de PowerShell. Esto es importante porque los datos se eliminan realmente cuando se envían fuera de PowerShell. Puede verlo si intenta crear una canalización que pagine los datos en la ventana host y, luego, intenta formatearla como una lista, tal como se muestra aquí:
Get-Process | Out-Host -Paging | Format-List
Es de esperar que el comando muestre páginas de información de proceso en formato de lista. En su lugar, muestra la lista tabular predeterminada:
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
101 5 1076 3316 32 0.05 2888 alg
...
618 18 39348 51108 143 211.20 740 explorer
257 8 9752 16828 79 3.02 2560 explorer
...
<SPACE> next page; <CR> next line; Q quit
...
El cmdlet Out-Host
envía los datos directamente a la consola, de modo que el comando Format-List
nunca recibe nada a lo que aplicar formato.
La forma correcta de estructurar este comando es colocar el cmdlet Out-Host
al final de la canalización, como se muestra a continuación. Esto hace que los datos de proceso se formateen en una lista antes de paginarse y mostrarse.
Get-Process | Format-List | Out-Host -Paging
Id : 2888
Handles : 101
CPU : 0.046875
Name : alg
...
Id : 740
Handles : 612
CPU : 211.703125
Name : explorer
Id : 2560
Handles : 257
CPU : 3.015625
Name : explorer
...
<SPACE> next page; <CR> next line; Q quit
...
Esto se aplica a todos los cmdlets Out. Un cmdlet Out siempre debe aparecer al final de la canalización.
Nota
Todos los cmdlets Out representan la salida como texto, con el formato vigente para la ventana de consola, incluidos los límites de longitud de línea.
Descartar la salida
El cmdlet Out-Null
está diseñado para descartar de inmediato cualquier entrada que reciba. Esto es útil para descartar los datos innecesarios que obtiene como efecto secundario de la ejecución de un comando. Si escribe el comando siguiente, no se obtienen resultados:
Get-Command | Out-Null
El cmdlet Out-Null
no descarta una salida de error. Por ejemplo, si escribe el comando siguiente, se muestra un mensaje que le informa de que PowerShell no reconoce Is-NotACommand
:
PS> Get-Command Is-NotACommand | Out-Null
Get-Command : 'Is-NotACommand' isn't recognized as a cmdlet, function, operable program, or script file.
At line:1 char:12
+ Get-Command <<<< Is-NotACommand | Out-Null
Impresión de datos
Out-Printer
solo está disponible en plataformas Windows.
Puede imprimir datos mediante el cmdlet Out-Printer
. Si no se proporciona un nombre de impresora, el cmdlet Out-Printer
usa la impresora predeterminada. Puede usar cualquier impresora basada en Windows especificando su nombre para mostrar. No se requiere ningún tipo de asignación de puerto de impresora ni una impresora física real.
Por ejemplo, si tiene las herramientas de creación de imágenes de documentos de Microsoft Office instaladas, puede enviar los datos a un archivo de imagen. Para ello, escriba:
Get-Command -Name Get-* | Out-Printer -Name 'Microsoft Office Document Image Writer'
Guardado de datos
Puede enviar la salida a un archivo en lugar de a la ventana de la consola mediante el cmdlet Out-File
. La línea de comandos siguiente envía una lista de procesos al archivo C:\temp\processlist.txt
:
Get-Process | Out-File -FilePath C:\temp\processlist.txt
Los resultados del uso del cmdlet Out-File
pueden no ser los esperados si se está acostumbrado al redireccionamiento de salida tradicional. Para entender su comportamiento, se debe tener en cuenta el contexto en el que opera el cmdlet Out-File
.
En Windows PowerShell 5.1, el cmdlet Out-File
crea un archivo Unicode. Algunas herramientas, que esperan archivos ASCII, no funcionan correctamente con el formato de salida predeterminado. Puede cambiar el formato de salida predeterminado a ASCII mediante el parámetro Encoding:
Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII
Out-file
aplica formato al contenido del archivo para que se parezca a la salida de la consola. Esto hace que, en la mayoría de las circunstancias, la salida se trunque igual que en una ventana de la consola. Por ejemplo, si ejecuta el siguiente comando:
Get-Command | Out-File -FilePath c:\temp\output.txt
El resultado tendrá un aspecto similar al siguiente:
CommandType Name Definition
----------- ---- ----------
Cmdlet Add-Content Add-Content [-Path] <String[...
Cmdlet Add-History Add-History [[-InputObject] ...
...
Para obtener una salida que no fuerce ajustes de línea para coincidir con el ancho de pantalla, puede usar el parámetro Width para especificar el ancho de línea. Dado que Width es un parámetro entero de 32 bits, el valor máximo que puede tener es 2147483647. Escriba lo siguiente para establecer el ancho de línea en este valor máximo:
Get-Command | Out-File -FilePath c:\temp\output.txt -Width 2147483647
El cmdlet Out-File
resulta especialmente útil cuando se quiere guardar la salida tal como se ha mostrado en la consola.