Tee-Object
Uloží výstup příkazu do souboru nebo proměnné a odešle ho také do kanálu.
Syntaxe
File (Výchozí)
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
Výstup zápisu Tee-Object rutiny ve dvou směrech. 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 výstup příkazu v konzole.
Interně Tee-Object používá příkazy Set-Variable a Out-File příkazy. Tyto příkazy podporují parametr WhatIf . Příkaz Tee-Object nepodporuje parametr WhatIf . Pokud ale zabalíte Tee-Object skript nebo funkci, která podporuje parametr WhatIf , Tee-Object předá stav WhatIf příkazům Set-Variable a Out-File příkazům.
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 proměnné $proc a vloží 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 proměnná $proc 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 AllSystemFiles.txt souboru a předá seznam kanálu do rutiny Out-File, která seznam uloží do NewSystemFiles.txt file.
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 do cesty k souboru \\.\CON. V jiných systémech než Windows použijete cestu k souboru /dev/tty.
Potom nastaví proměnnou $frontMatterPattern na regulární výraz, který odpovídá, 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 kroku použije Get-ChildItem k načtení každého souboru ve složce About.
Tee-Object pomocí parametru FileName vypíše výsledky kanálu do konzoly.
Where-Object filtruje soubory tak, že obsah získá jako jeden řetězec s parametrem RawGet-Content a porovná tento řetězec s $frontMatterPattern.
Příklad nakonec vytiskne názvy souborů ve složce, které mají definovaný blok metadat front matter.
Příklad 5: Použití Tee-Object ve skriptu s parametrem **WhatIf**
Příkaz Tee-Object nepodporuje parametr WhatIf . Pokud však zabalíte Tee-Object skript nebo funkci, která podporuje parametr WhatIf , Tee-Object předá stav WhatIf do Set-Variable příkazů, Out-File které používá interně.
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 ''
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.
Vlastnosti parametru
| Typ: | SwitchParameter |
| Default value: | False |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
File
| Position: | Named |
| Povinné: | False |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | 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 znakovou stránku ANSI aktuální kultury. Tato možnost byla přidána v PowerShellu 7.4. -
bigendianunicode: Kóduje ve formátu UTF-16 s použitím pořadí bajtů big-endian. -
oem: Používá výchozí kódování pro MS-DOS a konzolové programy. -
unicode: Kóduje ve formátu UTF-16 pomocí pořadí malých bajtů. -
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 Encoding také číselné ID registrovaných znakových stránek (například -Encoding 1251) nebo názvy řetězců registrovaných znakových stránek (například -Encoding "windows-1251"). Další informace naleznete v dokumentaci .NET pro Encoding.CodePage.
Od verze PowerShell 7.4 můžete použít hodnotu Ansi parametru Encoding a předat číselné ID pro znakovou stránku ANSI aktuální kultury, aniž by bylo nutné ji 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 zapíše upozornění, pokud pro parametr utf7 zadáte .
Vlastnosti parametru
| Typ: | Encoding |
| Default value: | UTF8NoBOM |
| Přípustné hodnoty: | ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
(All)
| Position: | 1 |
| Povinné: | False |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | 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 FilePath jako \\.\CON v systémech Windows nebo /dev/tty v jiných systémech než Windows, vytiskne se InputObject v konzole. Tyto cesty k souborům odpovídají zařízení konzoly aktuálního terminálu v systému, což umožňuje vytisknout InputObject a odeslat ho do výstupního datového proudu jedním příkazem.
Vlastnosti parametru
| Typ: | String |
| Default value: | None |
| Podporuje zástupné znaky: | True |
| DontShow: | False |
| Aliasy: | Cesta |
Sady parametrů
File
| Position: | 0 |
| Povinné: | True |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | False |
-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 do Tee-Object.
Pokud použijete parametr InputObject s Tee-Object, namísto piping command results to Tee-Object, InputObject hodnota je považována za jeden objekt, i když je hodnota kolekce.
Vlastnosti parametru
| Typ: | PSObject |
| Default value: | None |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
(All)
| Position: | Named |
| Povinné: | False |
| Hodnota z kanálu: | True |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | False |
-LiteralPath
Určuje soubor, do kterého tato rutina uloží objekt. Na rozdíl od FilePathse hodnota parametru LiteralPath používá přesně tak, jak je zadán. Žádný znak není interpretován jako zástupný znak. Pokud cesta obsahuje únikové znaky, uzavřete ji do jednoduchých uvozovek. Jednoduché uvozovky říkají PowerShellu, aby žádné znaky neinterpretoval jako únikové sekvence.
Vlastnosti parametru
| Typ: | String |
| Default value: | None |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
| Aliasy: | PSPath, PO |
Sady parametrů
LiteralFile
| Position: | Named |
| Povinné: | True |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | False |
-Variable
Určuje proměnnou, do které rutina uloží objekt. Zadejte název proměnné bez předchozího znaku dolaru ($).
Vlastnosti parametru
| Typ: | String |
| Default value: | None |
| Podporuje zástupné znaky: | False |
| DontShow: | False |
Sady parametrů
Variable
| Position: | Named |
| Povinné: | True |
| Hodnota z kanálu: | False |
| Hodnota z kanálu podle názvu vlastnosti: | False |
| Hodnota ze zbývajících argumentů: | False |
CommonParameters
Tato rutina podporuje běžné parametry: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction a -WarningVariable. Další informace najdete v about_CommonParameters.
Vstupy
PSObject
Objekty můžete předávat tomuto cmdletu.
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í UTF-8 bez BOM při zápisu do souborů. Pokud potřebujete jiné kódování, použijte rutinu Out-File s parametrem Encoding.