Udostępnij za pośrednictwem


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

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

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

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

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

PSObject

Do tego polecenia cmdlet można przekazać obiekty potokowe.

Dane wyjściowe

PSObject

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 .