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
Out-Filecmdlet , que envía la salida del comando a un archivo de texto. Normalmente, se usa elOut-Filecmdlet cuando es necesario usar sus parámetros, como los parámetrosEncoding,Force``Width, oNoClobber.Use el
Tee-Objectcmdlet , que envía la salida del comando a un archivo de texto y, a continuación, la envía a la canalización.Use los operadores de redireccionamiento de PowerShell. El uso del operador de redirección con un destino de archivo es funcionalmente equivalente a la canalización a
Out-Filesin parámetros adicionales.
Para obtener más información sobre las secuencias, vea about_Output_Streams.
Flujos de salida que se pueden redirigir
PowerShell admite el redireccionamiento de los siguientes flujos de salida.
| Corriente # | Descripción | Introducido en | Write Cmdlet |
|---|---|---|---|
| 1 | Éxito Corriente | PowerShell 2.0 | Write-Output |
| 2 | Error Corriente | PowerShell 2.0 | Write-Error |
| 3 | Advertencia Corriente | PowerShell 3.0 | Write-Warning |
| 4 | Detallado Corriente | PowerShell 3.0 | Write-Verbose |
| 5 | Depuración Corriente | PowerShell 3.0 | Write-Debug |
| 6 | Información Corriente | PowerShell 5.0 | Write-Information |
| * | Todos los 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 redireccionamiento de PowerShell son los siguientes, donde representa n 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 la secuencia especificada a un archivo. | n> |
>> |
Anexe la secuencia especificada a un archivo. | n>> |
>&1 |
Redirige la secuencia especificada a la secuencia Correcto . | n>&1 |
Nota
A diferencia de algunos shells de Unix, solo puede redirigir otras secuencias a la secuencia Success .
Ejemplos
Ejemplo 1: Redirigir errores y salidas a un archivo
Este ejemplo se ejecuta dir en un elemento que se realizará correctamente y otro que producirá un error.
dir 'C:\', 'fakepath' 2>&1 > .\dir.log
Usa para 2>&1 redirigir el flujo de error a la secuencia Correcto > y para enviar el flujo correcto resultante a un archivo denominado dir.log
Ejemplo 2: Envío de todos los datos de flujo correctos a un archivo
En este ejemplo se envían todos los datos de secuencia correctos a un archivo denominado script.log.
.\script.ps1 > script.log
Ejemplo 3: Envío de flujos correctos, de advertencia y de error 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>&1redirige el flujo de advertencia a la secuencia Correcto .2>&1redirige el flujo de error a la secuencia Correcto (que ahora también incluye todos los datos del flujo de advertencia)>redirige la secuencia Correcto (que ahora contiene secuencias 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ía la salida de todas las secuencias de un script llamado script.ps1 a un archivo denominado script.log
.\script.ps1 *> script.log
Ejemplo 5: Supresión de todos Write-Host datos de flujo de información
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, vea 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 preferencia de acción pueden cambiar lo que se escribe en una secuencia determinada. El script de este ejemplo muestra cómo 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 ejecutamos este script, se nos pregunta cuando $ErrorActionPreference está establecido en Inquire.
PS C:\temp> .\test.ps1
Confirm
Cannot find path 'C:\not-here' because it does not 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.
Al examinar 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 redirección que no anexan datos (> y n>) sobrescriben el contenido actual del archivo especificado sin previo aviso.
Sin embargo, si el archivo es de solo lectura, oculto o del sistema, se produce un error en el redireccionamiento. Los operadores de redirección de anexos (>> n>>y ) no escriben en un archivo de solo lectura, pero anexan contenido a un sistema o a un archivo oculto.
Para forzar el redireccionamiento del contenido a un archivo de solo lectura, oculto o del sistema, use el Out-File cmdlet con su Force parámetro .
Al escribir en archivos, los operadores de redirección usan codificación UTF8NoBOM . 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 o los operadores de redirección, PowerShell da formato a Out-File la salida de la tabla al archivo en función del ancho de la consola en la que se ejecuta. Por ejemplo, Get-ChildItem Env:\Path > path.log al registrar la salida de la tabla en un archivo mediante un comando como en un sistema donde el ancho de la consola está establecido 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 se puede establecer arbitrariamente en los sistemas en los que se ejecuta el script, puede preferir que la tabla de formato de PowerShell se ejecute en los archivos según el 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 en -Width 2000 cualquier lugar donde Out-Fileinvoque , $PSDefaultParameterValues puede usar la variable para establecer este valor para todos los usos Out-File del cmdlet en un script. Y dado que los operadores de redirección (> >>y ) son alias Out-Filede forma eficaz para , Out-File:Width establecer el parámetro para todo el script afecta también al ancho de formato de los operadores de redirección. Coloque el siguiente comando cerca de la parte superior del script para establecerlo 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 va a registrar una gran cantidad de datos tabulares en el archivo y sabe que puede obtener con un ancho más pequeño, use el ancho más pequeño.
En algunos casos, como Get-Service la salida, para usar el ancho adicional, Format-Table -AutoSize deberá canalizar la salida a través de antes de realizar la salida 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.
Posible confusión con los operadores de comparación
El > operador no debe confundirse con el operador de comparación Greater-than (a menudo se indica como > en otros lenguajes de programación).
En función de los objetos que se comparan, > la salida que se 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 ha escrito un 42 archivo llamado , con el contenido 36.
PS> dir
Mode LastWriteTime Length Name
---- ------------- ------ ----
------ 1/02/20 10:10 am 3 42
PS> cat 42
36
Al intentar 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 necesaria y -lt -gt se debe usar. Para obtener más información, vea el -gt operador en about_Comparison_Operators.
Consulte también
Comentarios
Enviar y ver comentarios de