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 Tee-Object
cmdlet przekierowuje dane wyjściowe, czyli wysyła dane wyjściowe polecenia w dwóch kierunkach (na przykład literę 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 do Select-Object
elementu .
Get-Process notepad | Tee-Object -Variable proc | Select-Object processname,handles
ProcessName Handles
----------- -------
notepad 43
notepad 37
notepad 38
notepad 38
Polecenie Select-Object
cmdlet wybiera właściwości ProcessName i Handles . Należy pamiętać, że zmienna $proc
zawiera informacje domyślne zwracane przez Get-Process
element .
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 Get-ChildItem
polecenia cmdlet 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 Out-File
polecenia cmdlet, które zapisuje listę na liście w NewSystemFiles.txt file
pliku .
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
W przykładzie zmienna $consoleDevice
jest ustawiana 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 \\.\CON
plików. W systemach innych niż Windows należy użyć ścieżki /dev/tty
plików.
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
polecenia , aby pobrać każdy plik w folderze About
. Tee-Object
Drukuje wyniki potoku do konsoli przy użyciu parametru FileName . Where-Object
filtruje pliki, uzyskując ich zawartość jako pojedynczy ciąg z parametrem Raw parametru Get-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. Domyślna wartość to utf8NoBOM
.
Dopuszczalne wartości tego parametru są następujące:
ascii
: używa kodowania dla 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ą języka Byte Order Mark (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, parametr Kodowanie umożliwia również numeryczne identyfikatory zarejestrowanych stron kodu (takich jak ) lub nazwy ciągów zarejestrowanych stron kodu (na przykład -Encoding 1251
-Encoding "windows-1251"
). Aby uzyskać więcej informacji, zobacz dokumentację platformy .NET dotyczącą pliku Encoding.CodePage.
Począwszy od programu PowerShell 7.4, można użyć Ansi
wartości parametru Kodowanie , 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.
Uwaga
UtF-7* nie jest już zalecane do użycia. Zgodnie z programem PowerShell 7.1 ostrzeżenie jest zapisywane w przypadku określenia utf7
parametru Kodowanie .
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 parametru FilePath w \\.\CON
systemie Windows lub /dev/tty
w systemach innych niż Windows obiekt InputObject jest drukowany w konsoli programu . Te ścieżki plików odpowiadają urządzeniu konsoli bieżącego terminalu w systemie, umożliwiając drukowanie obiektu 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
obiektu .
Jeśli używasz parametru InputObject z parametrem Tee-Object
, zamiast potokowania wyników polecenia do 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 parametru FilePath wartość 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 programu Tee-Object
:
- Windows:
tee
Możesz również użyć Out-File
polecenia cmdlet 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, używa kodowania UTF-8 bez Tee-Object
protokołu BOM podczas zapisywania w plikach. Jeśli potrzebujesz innego kodowania, użyj Out-File
polecenia cmdlet z parametrem Kodowanie .