Tee-Object
Salva a saída do comando em um arquivo ou variável e também a envia para baixo no 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 cmdlet Tee-Object
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 baixo no 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 variável $proc
e os redireciona 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 cmdlet Select-Object
seleciona as propriedades ProcessName e Handles. Observe que a variável $proc
inclui as informações padrão retornadas por Get-Process
.
Exemplo 3: arquivos do sistema de saída para dois arquivos de log
Este exemplo salva uma lista de arquivos do 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 cmdlet Get-ChildItem
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 cmdlet Out-File
, que salva a lista no NewSystemFiles.txt file
.
Exemplo 4: Imprimir saída no console e usar no pipeline
Este exemplo obtém os arquivos em uma pasta, os imprime no console e filtra os arquivos para aqueles que têm um bloco de metadados de matéria frontal definido. Por fim, ele lista os nomes dos artigos que têm matéria frontal.
$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 variável $consoleDevice
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 de arquivo \\.\CON
. Em sistemas não Windows, você usa o caminho de arquivo /dev/tty
.
Em seguida, ele define a variável $frontMatterPattern
para 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 pasta About
.
Tee-Object
imprime os resultados canalizados no 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 Get-Content
e comparando essa cadeia de caracteres com $frontMatterPattern
.
Por fim, 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 |
Cargo: | Named |
Valor padrão: | False |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Encoding
Especifica o tipo de codificação para o arquivo de destino. O valor padrão é utf8NoBOM
.
Os valores aceitáveis para esse 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 ao PowerShell 7.4. -
bigendianunicode
: codifica no formato UTF-16 usando a ordem de bytes big-endian. -
oem
: usa a codificação padrão para programas de MS-DOS e console. -
unicode
: codifica no formato UTF-16 usando a ordem de bytes little-endian. -
utf7
: codifica no formato UTF-7. -
utf8
: codifica no formato UTF-8. -
utf8BOM
: codifica no formato UTF-8 com Marca de Ordem de Byte (BOM) -
utf8NoBOM
: codifica no formato UTF-8 sem Marca de Ordem de Bytes (BOM) -
utf32
: codifica no formato UTF-32.
A partir do PowerShell 6.2, o parâmetro de codificação de 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 valor Ansi
para o parâmetro de codificação para passar a ID numérica para a 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 recomendável usar. A partir do PowerShell 7.1, um aviso será gravado se você especificar utf7
para o parâmetro de codificação.
Tipo: | Encoding |
Valores aceitos: | ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
Cargo: | 1 |
Valor padrão: | UTF8NoBOM |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-FilePath
Especifica um arquivo que esse cmdlet salva o objeto em caracteres curinga são permitidos, mas deve ser resolvido em 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 |
Cargo: | 0 |
Valor padrão: | None |
Obrigatório: | True |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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 obtém os objetos. Você também pode canalizar um objeto para Tee-Object
.
Quando você usa o parâmetro InputObject com Tee-Object
, em vez de canalizar resultados de comando para Tee-Object
, o valor InputObject é tratado como um único objeto, mesmo que o valor seja uma coleção.
Tipo: | PSObject |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | True |
Aceitar caracteres curinga: | 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 ele é digitado. Nenhum caractere é interpretado como curinga. Se o caminho incluir caracteres de escape, coloque-o entre aspas simples. As aspas simples dizem ao PowerShell para não interpretar nenhum caractere como sequências de escape.
Tipo: | String |
Aliases: | PSPath, LP |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | True |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Variable
Especifica uma variável na qual o cmdlet salva o objeto. Insira um nome de variável sem o sinal de dólar anterior ($
).
Tipo: | String |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | True |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
Entradas
Você pode redirecionar objetos para este cmdlet.
Saídas
Esse cmdlet retorna o objeto que ele redireciona.
Observações
O PowerShell inclui os seguintes aliases para Tee-Object
:
- Windows:
tee
Você também pode usar o cmdlet Out-File
ou o operador de redirecionamento, que salvam a saída em um arquivo, mas não o enviam pelo pipeline.
A partir do PowerShell 6, Tee-Object
usa codificação UTF-8 sem BOM quando grava em arquivos. Se você precisar de uma codificação diferente, use o cmdlet Out-File
com o parâmetro de codificação.