Compartilhar via


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

PSObject

Você pode redirecionar objetos para este cmdlet.

Saídas

PSObject

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.