Tee-Object
Salva a saída do comando em um arquivo ou variável e também a envia para o pipeline.
Sintaxe
Tee-Object
[-InputObject <PSObject>]
[-FilePath] <String>
[-Append]
[[-Encoding] <Encoding>]
[<CommonParameters>]
Tee-Object
[-InputObject <PSObject>]
-LiteralPath <String>
[[-Encoding] <Encoding>]
[<CommonParameters>]
Tee-Object
[-InputObject <PSObject>]
-Variable <String>
[<CommonParameters>]
Description
O Tee-Object
cmdlet redireciona a saída, ou seja, envia a saída de um comando em duas direções (como a letra T). Ele armazena a saída em um arquivo ou variável e também a envia para o pipeline. Se Tee-Object
for o último comando no pipeline, a saída do comando será exibida no prompt.
Exemplos
Exemplo 1: Processos de saída para um arquivo e para o console
Este exemplo obtém uma lista dos processos em execução no computador e envia o resultado para um arquivo. Como um segundo caminho não é especificado, os processos também são exibidos no console.
Get-Process | Tee-Object -FilePath "C:\Test1\testfile2.txt"
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
83 4 2300 4520 39 0.30 4032 00THotkey
272 6 1400 3944 34 0.06 3088 alg
81 3 804 3284 21 2.45 148 ApntEx
81 4 2008 5808 38 0.75 3684 Apoint
...
Exemplo 2: Processos de saída para uma variável e 'Select-Object'
Este exemplo obtém uma lista dos processos em execução no computador, salva-os na $proc
variável e canaliza-os para Select-Object
.
Get-Process notepad | Tee-Object -Variable proc | Select-Object processname,handles
ProcessName Handles
----------- -------
notepad 43
notepad 37
notepad 38
notepad 38
O Select-Object
cmdlet seleciona as propriedades ProcessName e Handles . Observe que a $proc
variável inclui as informações padrão retornadas pelo Get-Process
.
Exemplo 3: Saída de arquivos do sistema para dois arquivos de log
Este exemplo salva uma lista de arquivos de sistema em dois arquivos de log, um arquivo cumulativo e um arquivo atual.
Get-ChildItem -Path D: -File -System -Recurse |
Tee-Object -FilePath "c:\test\AllSystemFiles.txt" -Append |
Out-File c:\test\NewSystemFiles.txt
O comando usa o Get-ChildItem
cmdlet para fazer uma pesquisa recursiva de arquivos do sistema na unidade D:. Um operador de pipeline (|
) envia a lista para Tee-Object
, que acrescenta a lista ao arquivo AllSystemFiles.txt e passa a lista pelo pipeline para o Out-File
cmdlet, que salva a lista no NewSystemFiles.txt file
.
Exemplo 4: Saída de impressão para console e uso no pipeline
Este exemplo obtém os arquivos em uma pasta, imprime-os no console e, em seguida, filtra os arquivos para aqueles que têm um bloco de metadados de matéria frontal definido. Por fim, elenca os nomes dos artigos que têm matéria de frente.
$consoleDevice = if ($IsWindows) {
'\\.\CON'
} else {
'/dev/tty'
}
$frontMatterPattern = '(?s)^---(?<FrontMatter>.+)---'
$articles = Get-ChildItem -Path .\reference\7.4\PSReadLine\About\ |
Tee-Object -FilePath $consoleDevice |
Where-Object {
(Get-Content $_ -Raw) -match $frontMatterPattern
}
$articles.Name
Directory: C:\code\docs\PowerShell-Docs\reference\7.4\PSReadLine\About
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 12/13/2022 11:37 AM 384 .markdownlint.yaml
-a--- 4/25/2023 11:28 AM 40194 about_PSReadLine_Functions.md
-a--- 4/25/2023 10:58 AM 10064 about_PSReadLine.md
about_PSReadLine_Functions.md
about_PSReadLine.md
O exemplo define a $consoleDevice
variável como o valor do dispositivo de console do terminal atual. No Windows, você pode gravar no dispositivo de console atual redirecionando sua saída para o caminho do \\.\CON
arquivo. Em sistemas que não sejam Windows, você usa o caminho do /dev/tty
arquivo.
Em seguida, ele define a $frontMatterPattern
variável como uma expressão regular que corresponde quando uma cadeia de caracteres começa com três traços (---
) e tem qualquer conteúdo antes de outros três traços. Quando esse padrão corresponde ao conteúdo de um artigo, o artigo tem um bloco de metadados de matéria frontal definido.
Em seguida, o exemplo usa Get-ChildItem
para recuperar todos os arquivos na About
pasta. Tee-Object
imprime os resultados canalizados para o console usando o parâmetro FileName . Where-Object
filtra os arquivos obtendo seu conteúdo como uma única cadeia de caracteres com o parâmetro Raw de e comparando essa cadeia de Get-Content
caracteres com $frontMatterPattern
.
Finalmente, o exemplo imprime os nomes dos arquivos na pasta que têm um bloco de metadados de matéria frontal definido.
Parâmetros
-Append
Indica que o cmdlet acrescenta a saída ao arquivo especificado. Sem esse parâmetro, o novo conteúdo substitui qualquer conteúdo existente no arquivo sem aviso.
Esse parâmetro foi introduzido no Windows PowerShell 3.0.
Tipo: | SwitchParameter |
Position: | Named |
Default value: | False |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-Encoding
Especifica o tipo de codificação para o arquivo de destino. O valor predefinido é utf8NoBOM
.
Os valores aceitáveis para este parâmetro são os seguintes:
ascii
: Usa a codificação para o conjunto de caracteres ASCII (7 bits).ansi
: Usa a codificação para a página de código ANSI da cultura atual. Essa opção foi adicionada no PowerShell 7.4.bigendianunicode
: Codifica no formato UTF-16 usando a ordem de bytes big-endian.oem
: Usa a codificação padrão para MS-DOS e programas de console.unicode
: Codifica no formato UTF-16 usando a ordem de bytes little-endian.utf7
: Codifica em formato UTF-7.utf8
: Codifica em formato UTF-8.utf8BOM
: Codifica no formato UTF-8 com marca de ordem de bytes (BOM)utf8NoBOM
: Codifica no formato UTF-8 sem marca de ordem de bytes (BOM)utf32
: Codifica em formato UTF-32.
A partir do PowerShell 6.2, o parâmetro Encoding também permite IDs numéricas de páginas de código registradas (como -Encoding 1251
) ou nomes de cadeia de caracteres de páginas de código registradas (como -Encoding "windows-1251"
). Para obter mais informações, consulte a documentação do .NET para Encoding.CodePage.
A partir do PowerShell 7.4, você pode usar o Ansi
valor do parâmetro Encoding para passar a ID numérica da página de código ANSI da cultura atual sem precisar especificá-la manualmente.
Esse parâmetro foi introduzido no PowerShell 7.2.
Nota
UTF-7* não é mais recomendado para usar. A partir do PowerShell 7.1, um aviso será escrito se você especificar utf7
para o parâmetro Encoding .
Tipo: | Encoding |
Valores aceites: | ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
Position: | 1 |
Default value: | UTF8NoBOM |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-FilePath
Especifica um arquivo no qual esse cmdlet salva o objeto Caracteres curinga são permitidos, mas devem ser resolvidos para um único arquivo.
A partir do PowerShell 7, quando você especifica o FilePath como \\.\CON
no Windows ou /dev/tty
em sistemas não-Windows, o InputObject é impresso no console. Esses caminhos de arquivo correspondem ao dispositivo de console do terminal atual no sistema, permitindo que você imprima o InputObject e envie-o para o fluxo de saída com um comando.
Tipo: | String |
Aliases: | Path |
Position: | 0 |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | True |
-InputObject
Especifica o objeto a ser salvo e exibido. Insira uma variável que contenha os objetos ou digite um comando ou expressão que obtenha os objetos. Você também pode canalizar um objeto para Tee-Object
.
Quando você usa o parâmetro InputObject com Tee-Object
, em vez dos resultados do comando piping para Tee-Object
, o valor InputObject é tratado como um único objeto, mesmo que o valor seja uma coleção.
Tipo: | PSObject |
Position: | Named |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | True |
Aceitar carateres universais: | False |
-LiteralPath
Especifica um arquivo no qual esse cmdlet salva o objeto. Ao contrário de FilePath, o valor do parâmetro LiteralPath é usado exatamente como é digitado. Nenhum caractere é interpretado como curinga. Se o caminho incluir caracteres de escape, coloque-o entre aspas simples. Aspas simples dizem ao PowerShell para não interpretar nenhum caractere como sequências de escape.
Tipo: | String |
Aliases: | PSPath, LP |
Position: | Named |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-Variable
Especifica uma variável na qual o cmdlet salva o objeto. Insira um nome de variável sem o cifrão anterior ($
).
Tipo: | String |
Position: | Named |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
Entradas
Você pode canalizar objetos para este cmdlet.
Saídas
Este cmdlet retorna o objeto que redireciona.
Notas
O PowerShell inclui os seguintes aliases para Tee-Object
:
- Windows:
tee
Você também pode usar o Out-File
cmdlet ou o operador de redirecionamento, que salvam a saída em um arquivo, mas não a enviam pelo pipeline.
A partir do PowerShell 6, Tee-Object
usa a codificação UTF-8 sem BOM quando grava em arquivos. Se precisar de uma codificação diferente, use o Out-File
cmdlet com o parâmetro Encoding .