Partilhar via


Tee-Object

Guarda a saída do comando num ficheiro ou variável e também envia-a para baixo no 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). Armazena a saída num ficheiro ou variável e também envia-a para baixo no pipeline. Se Tee-Object for o último comando no pipeline, a saída do comando é apresentada na linha de comandos.

Exemplos

Exemplo 1: processos de saída para um ficheiro e para a consola

Este exemplo obtém uma lista dos processos em execução no computador e envia o resultado para um ficheiro. Uma vez que não é especificado um segundo caminho, os processos também são apresentados na consola do .

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, guarda-os na $proc variável e encaminha-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 . Tenha em atenção que a $proc variável inclui as informações predefinidas devolvidas por Get-Process.

Exemplo 3: exportar ficheiros do sistema para dois ficheiros de registo

Este exemplo guarda uma lista de ficheiros de sistema em dois ficheiros de registo, um ficheiro cumulativo e um ficheiro atual.

Get-ChildItem -Path D: -File -System -Recurse |
  Tee-Object -FilePath "c:\test\AllSystemFiles.txt" -Append |
    Out-File c:\test\NewSystemFiles.txt

O comando utiliza o Get-ChildItem cmdlet para fazer uma pesquisa recursiva para ficheiros de sistema na unidade D:. Um operador de pipeline (|) envia a lista para Tee-Object, que acrescenta a lista ao ficheiro AllSystemFiles.txt e transmite a lista pelo pipeline para o Out-File cmdlet, que guarda a lista no NewSystemFiles.txt file.

Exemplo 4: imprimir a saída para a consola e utilizá-lo no pipeline

Este exemplo obtém os ficheiros numa pasta, imprime-os na consola do e, em seguida, filtra os ficheiros para aqueles que têm um bloco de metadados de matéria frontal definido. Por fim, lista os nomes dos artigos que têm a primeira questão.

$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 para o valor do dispositivo de consola do terminal atual. No Windows, pode escrever no dispositivo da consola atual ao redirecionar a saída para o caminho do \\.\CON ficheiro. Em sistemas não Windows, utilize o caminho do /dev/tty ficheiro.

Em seguida, define a $frontMatterPattern variável para uma expressão regular que corresponde quando uma cadeia começa com três traços (---) e tem qualquer conteúdo antes de outros três traços. Quando este 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 utiliza Get-ChildItem para obter todos os ficheiros na About pasta. Tee-Object imprime os resultados direcionados para a consola com o parâmetro FileName . Where-Object filtra os ficheiros ao obter os respetivos conteúdos como uma única cadeia com o parâmetro Raw de Get-Content e ao comparar essa cadeia com $frontMatterPattern.

Por fim, o exemplo imprime os nomes dos ficheiros 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 ficheiro especificado. Sem este parâmetro, o novo conteúdo substitui qualquer conteúdo existente no ficheiro sem aviso prévio.

Este 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 ficheiro de destino. O valor predefinido é utf8NoBOM.

Os valores aceitáveis para este parâmetro são os seguintes:

  • ascii: utiliza a codificação para o conjunto de carateres ASCII (7 bits).
  • bigendianunicode: codifica no formato UTF-16 com a ordem de bytes big-endian.
  • oem: utiliza a codificação predefinida para ms-DOS e programas de consola.
  • unicode: codifica no formato UTF-16 com 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 Encomenda de Bytes (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 Codificação também permite IDs numéricos de páginas de código registadas (como -Encoding 1251) ou nomes de cadeia de carateres de páginas de código registadas (como -Encoding "windows-1251"). Para obter mais informações, veja a documentação do .NET para Encoding.CodePage.

Este parâmetro foi introduzido no PowerShell 7.2.

Nota

UTF-7* já não é recomendado para utilizar. A partir do PowerShell 7.1, é escrito um aviso se especificar utf7 para o parâmetro Codificação .

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 ficheiro que este cmdlet guarda o objeto em Carateres universais são permitidos, mas tem de ser resolvido para um único ficheiro.

A partir do PowerShell 7, quando especifica o FilePath como \\.\CON em sistemas Windows ou /dev/tty não Windows, o InputObject é impresso na consola do . Esses caminhos de ficheiro correspondem ao dispositivo de consola do terminal atual no sistema, permitindo-lhe imprimir o InputObject e enviá-lo 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 guardado e apresentado. Introduza uma variável que contenha os objetos ou escreva um comando ou expressão que obtenha os objetos. Também pode encaminhar um objeto para Tee-Object.

Quando utiliza o parâmetro InputObject com Tee-Object, em vez de encaminhar os resultados do comando 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 ficheiro no qual este cmdlet guarda o objeto. Ao contrário de FilePath, o valor do parâmetro LiteralPath é utilizado exatamente como é escrito. Não são interpretados carateres universais. Se o caminho incluir carateres de escape, coloque-o entre plicas. As aspas únicas indicam ao PowerShell para não interpretar os carateres 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 guarda o objeto. Introduza 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

Pode encaminhar objetos para este cmdlet.

Saídas

PSObject

Este cmdlet devolve o objeto que redireciona.

Notas

O PowerShell inclui os seguintes aliases para Tee-Object:

  • Windows:
    • tee

Também pode utilizar o Out-File cmdlet ou o operador de redirecionamento, ambos os quais guardam a saída num ficheiro, mas não o enviam para baixo no pipeline.

A partir do PowerShell 6, Tee-Object utiliza a codificação UTF-8 sem BOM quando escreve em ficheiros. Se precisar de uma codificação diferente, utilize o Out-File cmdlet com o parâmetro Encoding .