about_Redirection
Descripción breve
Explica cómo redirigir la salida de PowerShell a archivos de texto.
Descripción larga
De forma predeterminada, PowerShell envía la salida al host de PowerShell. Normalmente, se trata de la aplicación de consola. Sin embargo, puede redirigir la salida a un archivo de texto y puede redirigir la salida de error al flujo de salida normal.
Puede usar los métodos siguientes para redirigir la salida:
Use el cmdlet , que envía la
Out-File
salida del comando a un archivo de texto. Normalmente, se usa elOut-File
cmdlet cuando es necesario usar sus parámetros, como losEncoding
parámetros ,Force
,Width
oNoClobber
.Use el
Tee-Object
cmdlet , que envía la salida del comando a un archivo de texto y, a continuación, lo envía a la canalización.Use los operadores de redireccionamiento de PowerShell. El uso del operador de redireccionamiento con un destino de archivo es funcionalmente equivalente a canalizar a
Out-File
sin parámetros adicionales.
Para obtener más información sobre los flujos, consulte about_Output_Streams.
Flujos de salida redirigibles
PowerShell admite el redireccionamiento de los siguientes flujos de salida.
Stream # | Descripción | Introducida en | Write (cmdlet) |
---|---|---|---|
1 | Correcto Stream | PowerShell 2.0 | Write-Output |
2 | Error Stream | PowerShell 2.0 | Write-Error |
3 | Stream de advertencia | PowerShell 3.0 | Write-Warning |
4 | Stream detallado | PowerShell 3.0 | Write-Verbose |
5 | Depurar Stream | PowerShell 3.0 | Write-Debug |
6 | Información Stream | PowerShell 5.0 | Write-Information , Write-Host |
* | Todas las secuencias | PowerShell 3.0 |
También hay un flujo de progreso en PowerShell, pero no admite el redireccionamiento.
Importante
Las secuencias success y Error son similares a las secuencias stdout y stderr de otros shells. Sin embargo, stdin no está conectado a la canalización de PowerShell para la entrada.
Operadores de redireccionamiento de PowerShell
Los operadores de redirección de PowerShell son los siguientes, donde n
representa el número de secuencia. El flujo correcto ( 1
) es el valor predeterminado si no se especifica ninguna secuencia.
Operador | Descripción | Sintaxis |
---|---|---|
> |
Envíe una secuencia especificada a un archivo. | n> |
>> |
Anexe la secuencia especificada a un archivo. | n>> |
>&1 |
Redirige la secuencia especificada a la secuencia Success . | n>&1 |
Nota
A diferencia de algunos shells de Unix, solo puede redirigir otros flujos a la secuencia Success .
Ejemplos
Ejemplo 1: Redireccionamiento de errores y salida a un archivo
Este ejemplo se ejecuta en un elemento que se ejecuta dir
correctamente y otro que produce un error.
dir C:\, fakepath 2>&1 > .\dir.log
Usa 2>&1
para redirigir el flujo de error a la secuencia Success y >
para enviar el flujo correcto resultante a un archivo denominado dir.log
Ejemplo 2: Enviar todos los datos de flujo correctos a un archivo
En este ejemplo se envían todos los datos de flujo correctos a un archivo denominado script.log
.
.\script.ps1 > script.log
Ejemplo 3: Envío de flujos correctos, advertencias y errores a un archivo
En este ejemplo se muestra cómo puede combinar operadores de redirección para lograr un resultado deseado.
&{
Write-Warning "hello"
Write-Error "hello"
Write-Output "hi"
} 3>&1 2>&1 > C:\Temp\redirection.log
3>&1
redirige el flujo de advertencia a la secuencia Correcto .2>&1
redirige el flujo de error al flujo correcto (que ahora también incluye todos los datos del flujo de advertencia ).>
redirige la secuencia Success (que ahora contiene flujos de advertencia y error ) a un archivo denominadoC:\temp\redirection.log
.
Ejemplo 4: Redirigir todas las secuencias a un archivo
En este ejemplo se envían todos los flujos de salida de un script llamado script.ps1
a un archivo denominado script.log
.
.\script.ps1 *> script.log
Ejemplo 5: Suprimir todos los datos de flujo de información y Write-Host
En este ejemplo se suprimen todos los datos de flujo de información. Para obtener más información sobre los cmdlets de flujo de información, consulte Write-Host y Write-Information.
&{
Write-Host "Hello"
Write-Information "Hello" -InformationAction Continue
} 6> $null
Ejemplo 6: Mostrar el efecto de las preferencias de acción
Las variables y los parámetros de preferencias de acción pueden cambiar lo que se escribe en una secuencia determinada. El script de este ejemplo muestra cómo afecta el valor de $ErrorActionPreference
afecta a lo que se escribe en la secuencia de errores .
$ErrorActionPreference = 'Continue'
$ErrorActionPreference > log.txt
get-item /not-here 2>&1 >> log.txt
$ErrorActionPreference = 'SilentlyContinue'
$ErrorActionPreference >> log.txt
get-item /not-here 2>&1 >> log.txt
$ErrorActionPreference = 'Stop'
$ErrorActionPreference >> log.txt
Try {
get-item /not-here 2>&1 >> log.txt
}
catch {
"`tError caught!" >> log.txt
}
$ErrorActionPreference = 'Ignore'
$ErrorActionPreference >> log.txt
get-item /not-here 2>&1 >> log.txt
$ErrorActionPreference = 'Inquire'
$ErrorActionPreference >> log.txt
get-item /not-here 2>&1 >> log.txt
$ErrorActionPreference = 'Continue'
Cuando se ejecuta este script, se le solicita cuando $ErrorActionPreference
se establece Inquire
en .
PS C:\temp> .\test.ps1
Confirm
Can't find path 'C:\not-here' because it doesn't exist.
[Y] Yes [A] Yes to All [H] Halt Command [S] Suspend [?] Help (default is "Y"): H
Get-Item: C:\temp\test.ps1:23
Line |
23 | get-item /not-here 2>&1 >> log.txt
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| The running command stopped because the user selected the Stop option.
Cuando examinamos el archivo de registro, vemos lo siguiente:
PS C:\temp> Get-Content .\log.txt
Continue
Get-Item: C:\temp\test.ps1:3
Line |
3 | get-item /not-here 2>&1 >> log.txt
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Cannot find path 'C:\not-here' because it does not exist.
SilentlyContinue
Stop
Error caught!
Ignore
Inquire
Notas
Los operadores de redireccionamiento que no anexan datos (>
y n>
) sobrescriben el contenido actual del archivo especificado sin advertencia.
Sin embargo, si el archivo es un archivo de solo lectura, oculto o del sistema, se produce un error en el redireccionamiento. Los operadores de redirección de anexión (>>
y n>>
) no escriben en un archivo de solo lectura, pero anexan contenido a un sistema o archivo oculto.
Para forzar la redirección del contenido a un archivo de sistema, oculto o de solo lectura, use el Out-File
cmdlet con su Force
parámetro .
Al escribir en archivos, los operadores de redireccionamiento usan UTF8NoBOM
la codificación. Si el archivo tiene una codificación diferente, es posible que la salida no tenga el formato correcto. Para escribir en archivos con una codificación diferente, use el Out-File
cmdlet con su Encoding
parámetro .
Ancho de salida al escribir en un archivo
Al escribir en un archivo mediante Out-File
o los operadores de redireccionamiento, PowerShell da formato a la salida de la tabla al archivo en función del ancho de la consola en la que se ejecuta. Por ejemplo, al registrar la salida de la tabla en el archivo mediante un comando como Get-ChildItem Env:\Path > path.log
en un sistema donde el ancho de la consola se establece en 80 columnas, la salida del archivo se trunca a 80 caracteres:
Name Value
---- -----
Path C:\Program Files\PowerShell\7;C:\WINDOWS…
Teniendo en cuenta que el ancho de la consola puede establecerse arbitrariamente en sistemas en los que se ejecuta el script, es posible que prefiera que powerShell dé formato a la salida de la tabla a los archivos en función de un ancho que especifique en su lugar.
El Out-File
cmdlet proporciona un parámetro Width que permite establecer el ancho que desea para la salida de la tabla. En lugar de tener que agregar -Width 2000
en todas partes que invoque Out-File
, puede usar la $PSDefaultParameterValues
variable para establecer este valor para todos los usos del Out-File
cmdlet en un script. Y dado que los operadores de redirección (>
y >>
) son alias de forma eficaz para Out-File
, establecer el Out-File:Width
parámetro para todo el script afecta también al ancho de formato para los operadores de redireccionamiento. Coloque el siguiente comando cerca de la parte superior del script que se va a establecer Out-File:Width
para todo el script:
$PSDefaultParameterValues['out-file:width'] = 2000
Aumentar el ancho de salida aumentará el consumo de memoria al registrar la salida con formato de tabla. Si registra una gran cantidad de datos tabulares en el archivo y sabe que puede obtenerlo con un ancho menor, use el ancho más pequeño.
En algunos casos, como Get-Service
la salida, con el fin de usar el ancho adicional, deberá canalizar la salida antes de la salida Format-Table -AutoSize
al archivo.
$PSDefaultParameterValues['out-file:width'] = 2000
Get-Service | Format-Table -AutoSize > services.log
Para obtener más información sobre $PSDefaultParameterValues
, vea about_Preference_Variables.
Redireccionamiento de datos binarios
PowerShell no admite el redireccionamiento de datos binarios. Si redirige los datos de secuencia de bytes, PowerShell trata los datos como cadenas. Esta redirección da como resultado datos dañados.
Posible confusión con operadores de comparación
El >
operador no se debe confundir con el operador de comparación Mayor que (a menudo se indica como >
en otros lenguajes de programación).
Dependiendo de los objetos que se comparan, la salida que usa >
puede parecer correcta (porque 36 no es mayor que 42).
PS> if (36 > 42) { "true" } else { "false" }
false
Sin embargo, una comprobación del sistema de archivos local puede ver que se escribió un archivo denominado 42
, con el contenido 36
.
PS> dir
Mode LastWriteTime Length Name
---- ------------- ------ ----
------ 1/02/20 10:10 am 3 42
PS> cat 42
36
Si se intenta usar la comparación <
inversa (menor que), se produce un error del sistema:
PS> if (36 < 42) { "true" } else { "false" }
ParserError:
Line |
1 | if (36 < 42) { "true" } else { "false" }
| ~
| The '<' operator is reserved for future use.
Si la comparación numérica es la operación -lt
necesaria y -gt
se debe usar. Para obtener más información, consulte el -gt
operador en about_Comparison_Operators.