Redirigir salida
PowerShell proporciona varios cmdlets que le permiten controlar la salida de datos directamente. Estos cmdlets comparten dos características importantes.
En primer lugar, generalmente transforman datos en algún tipo de texto. Lo hacen porque envían los datos a componentes del sistema que requieren entrada de texto. Esto significa que necesitan representar los objetos como texto. Por lo tanto, el texto tiene el formato tal como lo ve en la ventana de la consola de PowerShell.
En segundo lugar, estos cmdlets utilizan el verbo Out de PowerShell porque envían información desde PowerShell a otro lugar.
Salida de consola
De forma predeterminada, PowerShell envía datos a la ventana del 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 siguiente comando utiliza Out-Host para paginar la salida del cmdlet Get-Command:
Get-Command | Out-Host -Paging
La visualización de la ventana del host está fuera de PowerShell. Esto es importante porque cuando los datos se envían desde PowerShell, en realidad se eliminan. Puede ver esto si intenta crear una canalización que envíe datos a la ventana del host y luego intente formatearla como una lista, como se muestra aquí:
Get-Process | Out-Host -Paging | Format-List
Es posible que espere que el comando muestre páginas de información del 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, por lo que el comando Format-List nunca recibe nada para formatear.
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 del proceso se formatee en una lista antes de paginarlos y mostrarlos.
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. Siempre debe aparecer un cmdlet Out al final de la canalización.
Nota
Todos los cmdlets Out representan la salida como texto, utilizando el formato vigente para la ventana de la consola, incluidos los límites de longitud de línea.
Descartar salida
El cmdlet Out-Null está diseñado para descartar inmediatamente cualquier entrada que reciba. Esto es útil para descartar datos innecesarios que se obtienen como efecto secundario de ejecutar un comando. Cuando escriba el siguiente comando, no obtendrá nada a cambio del comando:
Get-Command | Out-Null
El cmdlet Out-Null no descarta la salida de error. Por ejemplo, si ingresa el siguiente comando, se muestra un mensaje informándole 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
Imprimir datos
Out-Printersolo está disponible en plataformas Windows.
Puede imprimir datos utilizando el cmdlet Out-Printer. El cmdlet Out-Printer utiliza su impresora predeterminada si no proporciona un nombre de impresora. Puede utilizar cualquier impresora basada en Windows especificando su nombre para mostrar. No es necesario ningún tipo de asignación de puerto de impresora ni siquiera una impresora física real. Por ejemplo, si tiene instaladas las herramientas de creación de imágenes de documentos de Microsoft Office, puede enviar los datos a un archivo de imagen escribiendo:
Get-Command -Name Get-* | Out-Printer -Name 'Microsoft Office Document Image Writer'
Guardar datos
Puede enviar la salida a un archivo en lugar de a la ventana de la consola utilizando el cmdlet Out-File. La siguiente línea de comando envía una lista de procesos al archivo C:\temp\processlist.txt:
Get-Process | Out-File -FilePath C:\temp\processlist.txt
Es posible que los resultados del uso del cmdlet Out-File no sean los esperados si está acostumbrado a la redirección de salida tradicional. Para comprender su comportamiento, debe conocer 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 usando el parámetro Codificación:
Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII
Out-file formatea el contenido del archivo para que parezca la salida de la consola. Esto hace que la salida se trunque tal como está en una ventana de consola en la mayoría de las circunstancias. Por ejemplo, si ejecuta el siguiente comando:
Get-Command | Out-File -FilePath c:\temp\output.txt
La salida se verá así:
CommandType Name Definition
----------- ---- ----------
Cmdlet Add-Content Add-Content [-Path] <String[...
Cmdlet Add-History Add-History [[-InputObject] ...
...
Para obtener un resultado que no fuerce los ajustes de línea para que coincidan con el ancho de la pantalla, puede usar el parámetro Ancho para especificar el ancho de línea. Debido a que Ancho 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 es más útil cuando desea guardar la salida tal como se habría mostrado en la consola.