Búsqueda de sitios web

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-Printer solo 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.

Artículos relacionados