Tee-Object
Zapisuje dane wyjściowe polecenia w pliku lub zmiennej, a także wysyła je w dół potoku.
Składnia
File (Domyślna)
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>]
Opis
Polecenie Tee-Object cmdlet zapisuje dane wyjściowe w dwóch kierunkach. 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 konsoli programu .
Tee-Object Wewnętrznie używa poleceń Set-Variable i Out-File . Te polecenia obsługują parametr WhatIf . Polecenie Tee-Object nie obsługuje parametru WhatIf . Jeśli jednak opakowujesz Tee-Object skrypt lub funkcję, która obsługuje parametr WhatIf , Tee-Object przekazuje stan WhatIf do Set-Variable poleceń i Out-File .
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.
Przykład 5: użyj parametru "Tee-Object" w skryfcie z parametrem **WhatIf**
Polecenie Tee-Object nie obsługuje parametru WhatIf . Jeśli jednak opakowujesz Tee-Object skrypt lub funkcję, która obsługuje parametr WhatIf , Tee-Object przekazuje stan WhatIf do Set-Variable poleceń i Out-File używanych wewnętrznie.
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
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.
Właściwości parametru
| Typ: | SwitchParameter |
| Domyślna wartość: | False |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
File
| Position: | Named |
| Obowiązkowy: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | 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 strony kodowej ANSI dla bieżącej kultury. Ta opcja została dodana w programie PowerShell 7.4. -
bigendianunicode: Koduje w formacie UTF-16 wykorzystując porządek bajtów big-endian. -
oem: używa domyślnego kodowania dla programów MS-DOS i konsoli. -
unicode: Koduje w formacie UTF-16, używając układu 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, nie używając znacznika kolejności bajtów (BOM) -
utf32: koduje w formacie UTF-32.
Począwszy od programu PowerShell 6.2, w parametrze Kodowanie można używać również numerycznych identyfikatorów zarejestrowanych stron kodu (na przykład -Encoding 1251) lub nazw tekstowych 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
Ten parametr został wprowadzony w programie PowerShell 7.2.
Uwaga / Notatka
UTF-7* nie jest już zalecane do użycia. Od wersji PowerShell 7.1 zapisywane jest ostrzeżenie, jeśli określisz utf7 dla parametru kodowania .
Właściwości parametru
| Typ: | Encoding |
| Domyślna wartość: | UTF8NoBOM |
| Dopuszczalne wartości: | ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | 1 |
| Obowiązkowy: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | 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.
Właściwości parametru
| Typ: | String |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | True |
| DontShow: | False |
| Aliasy: | Ścieżka |
Zestawy parametrów
File
| Position: | 0 |
| Obowiązkowy: | True |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-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ą.
Właściwości parametru
| Typ: | PSObject |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowy: | False |
| Wartość z potoku: | True |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | 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. Żadne znaki nie są interpretowane jako symbole wieloznaczne. Jeśli ścieżka zawiera znaki ucieczki, należy ująć ją w pojedynczy cudzysłów. Pojedyncze cudzysłowy wskazują programowi PowerShell, aby nie interpretował żadnych znaków jako sekwencji ucieczki.
Właściwości parametru
| Typ: | String |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
| Aliasy: | PSPath, LP |
Zestawy parametrów
LiteralFile
| Position: | Named |
| Obowiązkowy: | True |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-Variable
Określa zmienną, do którego polecenie cmdlet zapisuje obiekt. Wprowadź nazwę zmiennej bez poprzedniego znaku dolara ($).
Właściwości parametru
| Typ: | String |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
Variable
| Position: | Named |
| Obowiązkowy: | True |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
CommonParameters
To polecenie cmdlet obsługuje typowe parametry: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction i -WarningVariable. Aby uzyskać więcej informacji, zobacz about_CommonParameters.
Dane wejściowe
PSObject
Do tego polecenia cmdlet można przekazywać obiekty.
Dane wyjściowe
PSObject
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.