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
Pode encaminhar objetos para este cmdlet.
Saídas
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 .