Udostępnij za pomocą


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

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.