Acerca del redireccionamiento
Descripción breve
Explica cómo redirigir la salida de PowerShell a archivos de texto.
Descripción larga
De forma predeterminada, PowerShell envía su salida de comando a la consola de PowerShell. Sin embargo, puede dirigir 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.
Operadores de redireccionamiento de PowerShell
Los operadores de redireccionamiento permiten enviar flujos de datos a un archivo o al flujo de salida Correcto .
Los operadores de redireccionamiento de PowerShell usan los siguientes números para representar los flujos de salida disponibles:
Stream # | Descripción | Introducida en |
---|---|---|
1 | Correcto Stream | PowerShell 2.0 |
2 | Error Stream | PowerShell 2.0 |
3 | Stream de advertencia | PowerShell 3.0 |
4 | Stream detallado | PowerShell 3.0 |
5 | Depurar Stream | PowerShell 3.0 |
6 | Información Stream | PowerShell 5.0 |
* | Todas las secuencias | PowerShell 3.0 |
Nota
También hay un flujo de progreso en PowerShell, pero no se usa para el redireccionamiento.
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 |
Ejemplos
Ejemplo 1: Redireccionamiento de errores y salida a un archivo
dir 'C:\', 'fakepath' 2>&1 > .\dir.log
Este ejemplo se ejecuta dir
en un elemento que se realizará correctamente y otro que producirá un error.
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
.\script.ps1 > script.log
Este comando envía todos los datos del flujo correcto a un archivo denominado script.log
Ejemplo 3: Envío de flujos correctos, advertencias y errores a un archivo
&{
Write-Warning "hello"
Write-Error "hello"
Write-Output "hi"
} 3>&1 2>&1 > P:\Temp\redirection.log
En este ejemplo se muestra cómo puede combinar operadores de redirección para lograr un resultado deseado.
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
.\script.ps1 *> script.log
En este ejemplo se envían todos los flujos de salida de un script llamado script.ps1
a un archivo denominado script.log
Ejemplo 5: Suprimir todos los datos de flujo de información y Write-Host
&{
Write-Host "Hello"
Write-Information "Hello" -InformationAction Continue
} 6> $null
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.
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, sino que 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 la codificación Unicode.
Si el archivo tiene una codificación diferente, es posible que la salida no tenga el formato correcto. Para redirigir el contenido a archivos que no son Unicode, use el Out-File
cmdlet con su Encoding
parámetro .
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" }
At line:1 char:8
+ if (36 < 42) { "true" } else { "false" }
+ ~
The '<' operator is reserved for future use.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : RedirectionNotSupported
Si la comparación numérica es la operación -lt
necesaria y -gt
se debe usar. Vea: -gt
Operador de comparación