Sdílet prostřednictvím


Tee-Object

Uloží výstup příkazu do souboru nebo proměnné a odešle ho také do kanálu.

Syntaxe

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

Rutina Tee-Object přesměruje výstup, to znamená, že odesílá výstup příkazu ve dvou směrech (například písmeno T). Uloží výstup do souboru nebo proměnné a také ho odešle do kanálu. Pokud Tee-Object je posledním příkazem v kanálu, zobrazí se na příkazovém řádku výstup příkazu.

Příklady

Příklad 1: Výstupní procesy do souboru a konzoly

Tento příklad získá seznam procesů spuštěných v počítači a odešle výsledek do souboru. Protože není zadána druhá cesta, procesy se také zobrazí v konzole.

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
...

Příklad 2: Výstupní procesy do proměnné a Select-Object

Tento příklad získá seznam procesů spuštěných v počítači, uloží je do $proc proměnné a předá je do Select-Object.

Get-Process notepad | Tee-Object -Variable proc | Select-Object processname,handles

ProcessName                              Handles
-----------                              -------
notepad                                  43
notepad                                  37
notepad                                  38
notepad                                  38

Rutina Select-Object vybere vlastnosti ProcessName a Handles . Všimněte si, že $proc proměnná obsahuje výchozí informace vrácené Get-Process.

Příklad 3: Výstupní systémové soubory do dvou souborů protokolu

Tento příklad uloží seznam systémových souborů do dvou souborů protokolu, kumulativního souboru a aktuálního souboru.

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

Příkaz používá rutinu Get-ChildItem k rekurzivnímu vyhledávání systémových souborů na jednotce D: . Operátor kanálu (|) odešle seznam Tee-Object, který připojí seznam k souboru AllSystemFiles.txt a předá seznam dolů kanálu do Out-File rutiny, která uloží seznam do NewSystemFiles.txt filesouboru .

Příklad 4: Tisk výstupu do konzoly a použití v kanálu

Tento příklad získá soubory ve složce, vytiskne je do konzoly a pak vyfiltruje soubory pro ty, které mají definovaný blok metadat front matter. Nakonec se zobrazí seznam názvů článků, které mají přední část.

$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

Příklad nastaví proměnnou $consoleDevice na hodnotu zařízení konzoly aktuálního terminálu. Ve Windows můžete zapisovat do aktuálního zařízení konzoly přesměrováním výstupu \\.\CON do cesty k souboru. V systémech, které nejsou systémy Windows, použijete /dev/tty cestu k souboru.

Potom nastaví $frontMatterPattern proměnnou na regulární výraz, který se shoduje, když řetězec začíná třemi pomlčkami (---) a má jakýkoli obsah před dalšími třemi pomlčkami. Pokud tento vzor odpovídá obsahu článku, obsahuje článek definovaný blok metadat front matter.

V dalším příkladu se načte Get-ChildItem každý soubor ve About složce. Tee-Object vytiskne výsledky kanálu do konzoly pomocí parametru FileName . Where-Objectfiltruje soubory získáním jejich obsahu jako jeden řetězec s nezpracovaným Get-Content parametrem a porovnáním tohoto řetězce s $frontMatterPattern.

Příklad nakonec vytiskne názvy souborů ve složce, které mají definovaný blok metadat front matter.

Parametry

-Append

Označuje, že rutina připojí výstup k zadanému souboru. Bez tohoto parametru nahradí nový obsah veškerý existující obsah v souboru bez upozornění.

Tento parametr byl představen ve Windows PowerShellu 3.0.

Typ:SwitchParameter
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Encoding

Určuje typ kódování cílového souboru. Výchozí hodnota je utf8NoBOM.

Přijatelné hodnoty pro tento parametr jsou následující:

  • ascii: Používá kódování znakové sady ASCII (7bitová).
  • ansi: Používá kódování pro kódovou stránku ANSI aktuální jazykové verze. Tato možnost byla přidána v PowerShellu 7.4.
  • bigendianunicode: Kóduje ve formátu UTF-16 pomocí pořadí velkých bajtů.
  • oem: Používá výchozí kódování pro MS-DOS a konzolové programy.
  • unicode: Kóduje ve formátu UTF-16 pomocí malého bajtového pořadí.
  • utf7: Kóduje ve formátu UTF-7.
  • utf8: Kóduje ve formátu UTF-8.
  • utf8BOM: Kódování ve formátu UTF-8 pomocí značky pořadí bajtů (BOM)
  • utf8NoBOM: Kódování ve formátu UTF-8 bez značky pořadí bajtů (BOM)
  • utf32: Kóduje ve formátu UTF-32.

Počínaje PowerShellem 6.2 umožňuje parametr Kódování také číselná ID registrovaných znakových stránek (jako -Encoding 1251) nebo názvy řetězců registrovaných znakových stránek (například -Encoding "windows-1251"). Další informace najdete v dokumentaci k .NET pro Encoding.CodePage.

Počínaje PowerShellem 7.4 můžete hodnotu parametru Encoding použít Ansi k předání číselného ID pro znakovou stránku ANSI aktuální jazykové verze, aniž byste ji museli zadávat ručně.

Tento parametr byl představen v PowerShellu 7.2.

Poznámka:

UTF-7* se už nedoporučuje používat. Od PowerShellu 7.1 se při zadání parametru Encoding zapíše utf7 upozornění.

Typ:Encoding
Přípustné hodnoty:ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:1
Default value:UTF8NoBOM
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-FilePath

Určuje soubor, který tato rutina uloží objekt do zástupných znaků, ale musí se přeložit na jeden soubor.

Když v PowerShellu 7 zadáte Cestu k souboru ve \\.\CON Windows nebo /dev/tty v systémech, které nejsou systémy Windows, zobrazí se v konzole objekt InputObject. Tyto cesty k souborům odpovídají zařízení konzoly aktuálního terminálu v systému, které umožňuje vytisknout InputObject a odeslat ho do výstupního datového proudu jedním příkazem.

Typ:String
Aliasy:Path
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:True

-InputObject

Určuje objekt, který se má uložit a zobrazit. Zadejte proměnnou obsahující objekty nebo zadejte příkaz nebo výraz, který objekty získá. Objekt můžete také pipetovat na Tee-Object.

Pokud použijete inputObject parametr s Tee-Object, místo piping command výsledky , Tee-ObjectInputObject je považována za jeden objekt, i když je hodnota kolekce.

Typ:PSObject
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-LiteralPath

Určuje soubor, do kterého tato rutina uloží objekt. Na rozdíl od FilePath se hodnota parametru LiteralPath používá přesně tak, jak je zadána. Žádné znaky nejsou interpretovány jako zástupné znaky. Pokud cesta obsahuje řídicí znaky, uzavřete ji do jednoduchých uvozovek. Jednoduché uvozovky říkají PowerShellu, aby nepřekládaly žádné znaky jako řídicí sekvence.

Typ:String
Aliasy:PSPath, LP
Position:Named
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Variable

Určuje proměnnou, do které rutina uloží objekt. Zadejte název proměnné bez předchozího znaku dolaru ($).

Typ:String
Position:Named
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

Vstupy

PSObject

Objekty můžete do této rutiny pipetovat.

Výstupy

PSObject

Tato rutina vrátí objekt, který přesměruje.

Poznámky

PowerShell obsahuje následující aliasy pro Tee-Object:

  • Windows:
    • tee

Můžete také použít rutinu Out-File nebo operátor přesměrování, z nichž oba ukládají výstup do souboru, ale neodesílají ho do kanálu.

Počínaje PowerShellem 6 Tee-Object používá kódování BOM-less UTF-8 při zápisu do souborů. Pokud potřebujete jiné kódování, použijte rutinu Out-File s parametrem Kódování .