Partilhar via


Tee-Object

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

Sintaxe

File (Predefinição)

Tee-Object
    [-FilePath] <String>
    [[-Encoding] <Encoding>]
    [-InputObject <PSObject>]
    [-Append]
    [<CommonParameters>]

LiteralFile

Tee-Object
    [[-Encoding] <Encoding>]
    -LiteralPath <String>
    [-InputObject <PSObject>]
    [<CommonParameters>]

Variable

Tee-Object
    -Variable <String>
    [-InputObject <PSObject>]
    [<CommonParameters>]

Description

A Tee-Object saída de gravação do cmdlet em duas direções. 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 console.

Internamente, Tee-Object usa os Set-Variable comandos e Out-File . Esses comandos suportam o parâmetro WhatIf . O Tee-Object comando não suporta o parâmetro WhatIf . No entanto, se você encapsular Tee-Object em um script ou função que suporte o parâmetro WhatIf , Tee-Object passa o estado de WhatIf para os Set-Variable comandos and Out-File .

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 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 cmdlet Select-Object seleciona o ProcessName e Handles propriedades. Observe que a variável $proc inclui as informações padrão retornadas por 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 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: 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 variável $consoleDevice para 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 que não sejam Windows, você usa o caminho de arquivo /dev/tty.

Em seguida, define a variável $frontMatterPattern 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 pasta About. 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 Get-Content e comparando essa cadeia de 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.

Exemplo 5: Use 'Tee-Object' em um script com o parâmetro **WhatIf**

O Tee-Object comando não suporta o parâmetro WhatIf . No entanto, se você encapsular Tee-Object em um script ou função que suporte o parâmetro WhatIf , Tee-Object passa o estado de WhatIf para o Set-Variable e Out-File comandos que ele usa internamente.

PS> function Test-Tee {
    [Cmdletbinding(SupportsShouldProcess)]
    Param()
    $true|tee -Variable b
    "Variable `$b is set to '$b'"
}

PS> Test-Tee

True
Variable $b is set to 'True'

PS> Test-Tee -WhatIf
True
What if: Performing the operation "Set variable" on target "Name: b Value: True".
Variable $b is set to ''

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.

Propriedades dos parâmetros

Tipo:SwitchParameter
Default value:False
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

File
Position:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos: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: Utiliza a codificação predefinida para MS-DOS e programas de consola.
  • unicode: Codifica em formato UTF-16 utilizando 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 Byte Order Mark (BOM)
  • utf8NoBOM: Codifica no formato UTF-8 sem Byte Order Mark (BOM)
  • utf32: Codifica no formato UTF-32.

A partir do PowerShell 6.2, o parâmetro Encoding também permite IDs numéricos 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 Encoding 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.

Observação

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.

Propriedades dos parâmetros

Tipo:Encoding
Default value:UTF8NoBOM
Valores aceites:ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

(All)
Position:1
Obrigatório:False
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos: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 que não sejam 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.

Propriedades dos parâmetros

Tipo:String
Default value:None
Suporta carateres universais:True
NãoMostrar:False
Aliases:Caminho

Conjuntos de parâmetros

File
Position:0
Obrigatório:True
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-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 de canalizar os resultados do comando para Tee-Object, o valor da InputObject é tratado como um único objeto, mesmo que o valor seja uma coleção.

Propriedades dos parâmetros

Tipo:PSObject
Default value:None
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

(All)
Position:Named
Obrigatório:False
Valor do pipeline:True
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-LiteralPath

Especifica um arquivo no qual esse cmdlet salva o objeto. Ao contrário FilePath, o valor do parâmetro LiteralPath é usado exatamente como é digitado. Nenhum caractere é interpretado como carta curinga. Se o caminho incluir caracteres de escape, coloque-o entre aspas simples. Aspas simples indicam ao PowerShell para não interpretar quaisquer caracteres como sequências de escape.

Propriedades dos parâmetros

Tipo:String
Default value:None
Suporta carateres universais:False
NãoMostrar:False
Aliases:PSPath, LP

Conjuntos de parâmetros

LiteralFile
Position:Named
Obrigatório:True
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

-Variable

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

Propriedades dos parâmetros

Tipo:String
Default value:None
Suporta carateres universais:False
NãoMostrar:False

Conjuntos de parâmetros

Variable
Position:Named
Obrigatório:True
Valor do pipeline:False
Valor do pipeline por nome de propriedade:False
Valor dos restantes argumentos:False

CommonParameters

Este cmdlet suporta os parâmetros comuns: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Para obter mais informações, consulte about_CommonParameters.

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 cmdlet Out-File 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 você precisar de uma codificação diferente, use o cmdlet Out-File com o parâmetro Encoding.