Tee-Object
Zapisuje dane wyjściowe polecenia w pliku lub zmiennej, a także wysyła je w dół potoku.
Składnia
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>]
Opis
Polecenie cmdlet Tee-Object
przekierowuje dane wyjściowe, czyli wysyła dane wyjściowe polecenia w dwóch kierunkach (na przykład litera T). Przechowuje dane wyjściowe w pliku lub zmiennej, a także wysyła je w dół potoku. Jeśli Tee-Object
jest ostatnim poleceniem w potoku, dane wyjściowe polecenia są wyświetlane w wierszu polecenia.
Przykłady
Przykład 1: Procesy wyjściowe do pliku i do konsoli
Ten przykład pobiera listę procesów uruchomionych na komputerze i wysyła wynik do pliku. Ponieważ nie określono drugiej ścieżki, procesy są również wyświetlane w konsoli programu .
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
...
Przykład 2: Procesy wyjściowe do zmiennej i "Select-Object"
Ten przykład pobiera listę procesów uruchomionych na komputerze, zapisuje je w zmiennej $proc
i potokuje je w celu Select-Object
.
Get-Process notepad | Tee-Object -Variable proc | Select-Object ProcessName, Handles
ProcessName Handles
----------- -------
notepad 43
notepad 37
notepad 38
notepad 38
Polecenie cmdlet Select-Object
wybiera właściwości ProcessName i Handles. Należy pamiętać, że zmienna $proc
zawiera informacje domyślne zwracane przez Get-Process
.
Przykład 3: Dane wyjściowe plików systemowych do dwóch plików dziennika
W tym przykładzie jest zapisywana lista plików systemowych w dwóch plikach dziennika, pliku skumulowanego i bieżącego pliku.
Get-ChildItem -Path D: -File -System -Recurse |
Tee-Object -FilePath "c:\test\AllSystemFiles.txt" -Append |
Out-File c:\test\NewSystemFiles.txt
Polecenie używa polecenia cmdlet Get-ChildItem
do wykonywania cyklicznego wyszukiwania plików systemowych na dysku D:. Operator potoku (|
) wysyła listę do Tee-Object
, która dołącza listę do pliku AllSystemFiles.txt i przekazuje listę w dół potoku do polecenia cmdlet Out-File
, które zapisuje listę w NewSystemFiles.txt file
.
Przykład 4. Drukowanie danych wyjściowych do konsoli i używanie ich w potoku
Ten przykład pobiera pliki w folderze, drukuje je w konsoli, a następnie filtruje pliki dla tych, które mają zdefiniowany blok metadanych sprawy frontonu. Na koniec zawiera listę nazw artykułów, które mają kwestię frontonu.
$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
Przykład ustawia zmienną $consoleDevice
na wartość urządzenia konsoli bieżącego terminalu. W systemie Windows możesz zapisać na bieżącym urządzeniu konsoli, przekierowując dane wyjściowe do ścieżki plików \\.\CON
. W systemach innych niż Windows należy użyć ścieżki plików /dev/tty
.
Następnie ustawia zmienną $frontMatterPattern
na wyrażenie regularne, które jest zgodne, gdy ciąg zaczyna się od trzech kreski (---
) i ma dowolną zawartość przed kolejnymi trzema kreskami. Gdy ten wzorzec pasuje do zawartości artykułu, artykuł ma zdefiniowany blok metadanych sprawy frontonu.
Następnie w przykładzie użyto Get-ChildItem
do pobrania każdego pliku w folderze About
.
Tee-Object
wyświetla potokowe wyniki do konsoli przy użyciu parametru FileName.
Where-Object
filtruje pliki, uzyskując ich zawartość jako pojedynczy ciąg z parametrem RawGet-Content
i porównując ten ciąg z $frontMatterPattern
.
Na koniec przykład wyświetla nazwy plików w folderze, w których zdefiniowano blok metadanych front matter.
Parametry
-Append
Wskazuje, że polecenie cmdlet dołącza dane wyjściowe do określonego pliku. Bez tego parametru nowa zawartość zastępuje dowolną istniejącą zawartość w pliku bez ostrzeżenia.
Ten parametr został wprowadzony w programie Windows PowerShell 3.0.
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Encoding
Określa typ kodowania dla pliku docelowego. Wartość domyślna to utf8NoBOM
.
Dopuszczalne wartości tego parametru są następujące:
-
ascii
: używa kodowania zestawu znaków ASCII (7-bitowych). -
ansi
: używa kodowania dla strony kodowej ANSI bieżącej kultury. Ta opcja została dodana w programie PowerShell 7.4. -
bigendianunicode
: koduje w formacie UTF-16 przy użyciu kolejności bajtów big-endian. -
oem
: używa domyślnego kodowania dla programów MS-DOS i konsoli. -
unicode
: Koduje w formacie UTF-16 przy użyciu kolejności bajtów little-endian. -
utf7
: koduje w formacie UTF-7. -
utf8
: koduje w formacie UTF-8. -
utf8BOM
: koduje w formacie UTF-8 za pomocą znacznika kolejności bajtów (BOM) -
utf8NoBOM
: koduje w formacie UTF-8 bez znaku kolejności bajtów (BOM) -
utf32
: koduje w formacie UTF-32.
Począwszy od programu PowerShell 6.2, Kodowanie parametr umożliwia również numeryczne identyfikatory zarejestrowanych stron kodu (na przykład -Encoding 1251
) lub nazwy ciągów zarejestrowanych stron kodu (na przykład -Encoding "windows-1251"
). Aby uzyskać więcej informacji, zobacz dokumentację platformy .NET dotyczącą Encoding.CodePage.
Począwszy od programu PowerShell 7.4, można użyć wartości Ansi
parametru kodowania, aby przekazać identyfikator liczbowy dla strony kodowej ANSI bieżącej kultury bez konieczności ręcznego określania go.
Ten parametr został wprowadzony w programie PowerShell 7.2.
Nuta
UTF-7 * nie jest już zalecane. Zgodnie z programem PowerShell 7.1 ostrzeżenie jest zapisywane, jeśli określisz utf7
dla parametru kodowania.
Typ: | Encoding |
Dopuszczalne wartości: | ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
Position: | 1 |
Domyślna wartość: | UTF8NoBOM |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-FilePath
Określa plik, który to polecenie cmdlet zapisuje obiekt w postaci symboli wieloznacznych, ale musi zostać rozpoznany jako pojedynczy plik.
Począwszy od programu PowerShell 7, po określeniu FilePath jako \\.\CON
w systemie Windows lub /dev/tty
w systemach innych niż Windows, InputObject zostanie wydrukowany w konsoli programu . Te ścieżki plików odpowiadają urządzeniu konsoli bieżącego terminalu w systemie, umożliwiając drukowanie InputObject i wysyłanie go do strumienia wyjściowego za pomocą jednego polecenia.
Typ: | String |
Aliasy: | Path |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | True |
-InputObject
Określa obiekt, który ma zostać zapisany i wyświetlony. Wprowadź zmienną zawierającą obiekty lub wpisz polecenie lub wyrażenie, które pobiera obiekty. Możesz również przekazać obiekt do Tee-Object
.
Jeśli używasz parametru InputObject z Tee-Object
, zamiast potokowania wyników polecenia, aby Tee-Object
, wartość InputObject jest traktowana jako pojedynczy obiekt, nawet jeśli wartość jest kolekcją.
Typ: | PSObject |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-LiteralPath
Określa plik, do którego to polecenie cmdlet zapisuje obiekt. W przeciwieństwie do FilePathwartość parametru LiteralPath jest używana dokładnie tak, jak jest typowana. Znaki nie są interpretowane jako symbole wieloznaczne. Jeśli ścieżka zawiera znaki ucieczki, należy ująć ją w pojedynczy cudzysłów. Pojedyncze znaki cudzysłowu informują program PowerShell, aby nie interpretował żadnych znaków jako sekwencji ucieczki.
Typ: | String |
Aliasy: | PSPath, LP |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Variable
Określa zmienną, do którego polecenie cmdlet zapisuje obiekt. Wprowadź nazwę zmiennej bez poprzedniego znaku dolara ($
).
Typ: | String |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
Dane wejściowe
Do tego polecenia cmdlet można przekazać obiekty potokowe.
Dane wyjściowe
To polecenie cmdlet zwraca obiekt, który przekierowuje.
Uwagi
Program PowerShell zawiera następujące aliasy dla Tee-Object
:
- Windows:
tee
Możesz również użyć polecenia cmdlet Out-File
lub operatora przekierowania, z których oba zapisują dane wyjściowe w pliku, ale nie wysyłają go w dół potoku.
Począwszy od programu PowerShell 6, Tee-Object
używa kodowania UTF-8 bez protokołu BOM podczas zapisywania w plikach. Jeśli potrzebujesz innego kodowania, użyj polecenia cmdlet Out-File
z parametrem Encoding.