Sobre o redirecionamento
Descrição breve
Explica como redirecionar a saída do PowerShell para arquivos de texto.
Descrição longa
Por padrão, o PowerShell envia a saída para o host do PowerShell. Normalmente, esse é o aplicativo de console. No entanto, você pode direcionar a saída para um arquivo de texto e redirecionar a saída de erro para o fluxo de saída regular.
Você pode usar os seguintes métodos para redirecionar a saída:
Use o
Out-File
cmdlet , que envia a saída de comando para um arquivo de texto. Normalmente, você usa oOut-File
cmdlet quando precisa usar seus parâmetros, como osEncoding
parâmetros ,Force
,Width
ouNoClobber
.Use o
Tee-Object
cmdlet , que envia a saída de comando para um arquivo de texto e, em seguida, envia-a para o pipeline.Use os operadores de redirecionamento do PowerShell. Usar o operador de redirecionamento com um destino de arquivo é funcionalmente equivalente à canalização para
Out-File
sem parâmetros extras.
Para obter mais informações sobre fluxos, consulte about_Output_Streams.
Fluxos de saída redirecionáveis
O PowerShell dá suporte ao redirecionamento dos fluxos de saída a seguir.
Stream # | Descrição | Introduzido no | Cmdlet de gravação |
---|---|---|---|
1 | Êxito Stream | PowerShell 2.0 | Write-Output |
2 | Erro Stream | PowerShell 2.0 | Write-Error |
3 | Stream de aviso | PowerShell 3.0 | Write-Warning |
4 | Stream detalhado | PowerShell 3.0 | Write-Verbose |
5 | Depurar Stream | PowerShell 3.0 | Write-Debug |
6 | Stream de informações | PowerShell 5.0 | Write-Information |
* | Todos os Fluxos | PowerShell 3.0 |
Observação
Também há um fluxo de progresso no PowerShell, mas ele não dá suporte ao redirecionamento.
Operadores de redirecionamento do PowerShell
Os operadores de redirecionamento do PowerShell são os seguintes, em que n
representa o número do fluxo. O fluxo de êxito ( 1
) será o padrão se nenhum fluxo for especificado.
Operador | Descrição | Syntax |
---|---|---|
> |
Enviar fluxo especificado para um arquivo. | n> |
>> |
Acrescente o fluxo especificado a um arquivo. | n>> |
>&1 |
Redireciona o fluxo especificado para o fluxo Êxito . | n>&1 |
Observação
Ao contrário de alguns shells do Unix, você só pode redirecionar outros fluxos para o fluxo Êxito .
Exemplos
Exemplo 1: Redirecionar erros e saída para um arquivo
Este exemplo é executado dir
em um item que terá êxito e um que ocorrerá um erro.
dir 'C:\', 'fakepath' 2>&1 > .\dir.log
Ele usa 2>&1
para redirecionar o fluxo de erro para o fluxo Êxito e >
para enviar o fluxo de êxito resultante para um arquivo chamado dir.log
Exemplo 2: Enviar todos os dados de fluxo de êxito para um arquivo
Este exemplo envia todos os dados de fluxo de êxito para um arquivo chamado script.log
.
.\script.ps1 > script.log
Exemplo 3: enviar fluxos de êxito, aviso e erro para um arquivo
Este exemplo mostra como você pode combinar operadores de redirecionamento para obter um resultado desejado.
&{
Write-Warning "hello"
Write-Error "hello"
Write-Output "hi"
} 3>&1 2>&1 > P:\Temp\redirection.log
3>&1
redireciona o fluxo de aviso para o fluxo Êxito .2>&1
redireciona o fluxo de erro para o fluxo de êxito (que também agora inclui todos os dados de fluxo de aviso)>
redireciona o fluxo Êxito (que agora contém fluxos de Aviso e Erro ) para um arquivo chamadoC:\temp\redirection.log
)
Exemplo 4: redirecionar todos os fluxos para um arquivo
Este exemplo envia todas as saídas de fluxos de um script chamado script.ps1
para um arquivo chamado script.log
.\script.ps1 *> script.log
Exemplo 5: Suprimir todos os dados de fluxo de informações e Write-Host
Este exemplo suprime todos os dados de fluxo de informações. Para ler mais sobre cmdlets de fluxo de informações , consulte Write-Host e Write-Information
&{
Write-Host "Hello"
Write-Information "Hello" -InformationAction Continue
} 6> $null
Exemplo 6: Mostrar o efeito das Preferências de Ação
Variáveis e parâmetros de preferência de ação podem alterar o que é gravado em um fluxo específico. O script neste exemplo mostra como o valor de $ErrorActionPreference
afeta o que é gravado no fluxo De erro .
$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'
Quando executamos esse script, somos solicitados quando $ErrorActionPreference
é definido como 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.
Quando examinamos o arquivo de log, vemos o seguinte:
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
Observações
Os operadores de redirecionamento que não acrescentam dados (>
e n>
) substituem o conteúdo atual do arquivo especificado sem aviso.
No entanto, se o arquivo for somente leitura, oculto ou arquivo do sistema, o redirecionamento falhará. Os operadores de redirecionamento de acréscimo (>>
e n>>
) não gravam em um arquivo somente leitura, mas acrescentam conteúdo a um sistema ou arquivo oculto.
Para forçar o redirecionamento de conteúdo para um arquivo somente leitura, oculto ou do sistema, use o Out-File
cmdlet com seu Force
parâmetro .
Quando você está gravando em arquivos, os operadores de redirecionamento usam UTF8NoBOM
codificação. Se o arquivo tiver uma codificação diferente, a saída poderá não ser formatada corretamente. Para gravar em arquivos com uma codificação diferente, use o Out-File
cmdlet com seu Encoding
parâmetro .
Possível confusão com operadores de comparação
O >
operador não deve ser confundido com o operador de comparação Maior que (geralmente indicado como >
em outras linguagens de programação).
Dependendo dos objetos que estão sendo comparados, a saída usando >
pode parecer correta (porque 36 não é maior que 42).
PS> if (36 > 42) { "true" } else { "false" }
false
No entanto, um marcar do sistema de arquivos local pode ver que um arquivo chamado 42
foi gravado, com o conteúdo 36
.
PS> dir
Mode LastWriteTime Length Name
---- ------------- ------ ----
------ 1/02/20 10:10 am 3 42
PS> cat 42
36
Tentar usar a comparação <
inversa (menor que), gera um erro do 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
Se a comparação numérica for a operação -lt
necessária e -gt
deverá ser usada. Consulte: -gt
Operador de comparação