Partilhar via


Tee-Object

Salva a saída do comando em um arquivo ou variável e também a envia para o pipeline.

Syntax

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.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters: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 .

Type:Encoding
Accepted values:ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:1
Default value:UTF8NoBOM
Required:False
Accept pipeline input:False
Accept wildcard characters: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.

Type:String
Aliases:Path
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters: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.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters: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.

Type:String
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Variable

Especifica uma variável na qual o cmdlet salva o objeto. Insira um nome de variável sem o cifrão anterior ($).

Type:String
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Entradas

PSObject

Você pode canalizar objetos para este cmdlet.

Saídas

PSObject

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 .