Freigeben über


Tee-Object

Speichert die Ausgabe des Befehls in einer Datei oder einer Variablen, und sendet sie über die Pipeline.

Syntax

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

Beschreibung

Das Tee-Object Cmdlet leitet die Ausgabe um. Das heißt, es sendet die Ausgabe eines Befehls in zwei Richtungen (z. B. den Buchstaben T). Das Cmdlet speichert die Ausgabe in einer Datei oder einer Variablen und sendet sie über die Pipeline. Wenn Tee-Object der letzte Befehl in der Pipeline ist, wird die Befehlsausgabe an der Eingabeaufforderung angezeigt.

Beispiele

Beispiel 1: Ausgabeprozesse in eine Datei und an die Konsole

In diesem Beispiel wird eine Liste der prozesse abgerufen, die auf dem Computer ausgeführt werden, und das Ergebnis wird an eine Datei gesendet. Da kein zweiter Pfad angegeben ist, werden die Prozesse auch in der Konsole angezeigt.

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

Beispiel 2: Ausgabeprozesse an eine Variable und "Select-Object"

In diesem Beispiel wird eine Liste der auf dem Computer ausgeführten Prozesse abgerufen, in der $proc Variablen gespeichert und an Select-Objectübergeben.

Get-Process notepad | Tee-Object -Variable proc | Select-Object processname,handles

ProcessName                              Handles
-----------                              -------
notepad                                  43
notepad                                  37
notepad                                  38
notepad                                  38

Das Select-Object Cmdlet wählt die Eigenschaften ProcessName und Handles aus. Beachten Sie, dass die $proc Variable die Standardinformationen enthält, die von zurückgegeben werden Get-Process.

Beispiel 3: Ausgeben von Systemdateien in zwei Protokolldateien

In diesem Beispiel wird eine Liste der Systemdateien in zwei Protokolldateien gespeichert: einer kumulativen Datei und einer aktuellen Datei.

Get-ChildItem -Path D: -File -System -Recurse |
  Tee-Object -FilePath "c:\test\AllSystemFiles.txt" -Append |
    Out-File c:\test\NewSystemFiles.txt

Der Befehl verwendet das Get-ChildItem Cmdlet, um eine rekursive Suche nach Systemdateien auf Laufwerk D: durchzuführen. Ein Pipelineoperator (|) sendet die Liste an Tee-Object, der die Liste an die AllSystemFiles.txt-Datei anhängt und die Liste in der Pipeline an das Out-File Cmdlet übergibt, das die Liste im NewSystemFiles.txt filespeichert.

Beispiel 4: Ausgabe in der Konsole drucken und in der Pipeline verwenden

In diesem Beispiel werden die Dateien in einem Ordner abgerufen, in der Konsole ausgegeben und dann die Dateien nach Dateien gefiltert, die über einen definierten Front-Matter-Metadatenblock verfügen. Schließlich werden die Namen der Artikel aufgelistet, die front matter haben.

$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

Im Beispiel wird die $consoleDevice Variable auf den Wert des Konsolengeräts des aktuellen Terminals festgelegt. Unter Windows können Sie auf das aktuelle Konsolengerät schreiben, indem Sie Ihre Ausgabe an den \\.\CON Dateipfad umleiten. Auf Nicht-Windows-Systemen verwenden Sie den /dev/tty Dateipfad.

Anschließend wird die $frontMatterPattern Variable auf einen regulären Ausdruck festgelegt, der abgleicht, wenn eine Zeichenfolge mit drei Bindestrichen (---) beginnt und über einen beliebigen Inhalt vor drei weiteren Bindestrichen verfügt. Wenn dieses Muster mit dem Inhalt eines Artikels übereinstimmt, verfügt der Artikel über einen definierten Front-Matter-Metadatenblock.

Als Nächstes wird im Beispiel verwendet Get-ChildItem , um jede Datei im About Ordner abzurufen. Tee-Object gibt die ergebnisse, die per Pipe übergeben wurden, mithilfe des FileName-Parameters an die Konsole aus. Where-Object filtert die Dateien, indem sie ihren Inhalt als einzelne Zeichenfolge mit dem Raw-Parameter von Get-Content abrufen und diese Zeichenfolge mit $frontMatterPatternvergleichen.

Schließlich werden im Beispiel die Namen der Dateien im Ordner ausgegeben, die über einen definierten Front-Matter-Metadatenblock verfügen.

Parameter

-Append

Gibt an, dass das Cmdlet die Ausgabe an die angegebene Datei anhängt. Ohne diesen Parameter ersetzt der neue Inhalt vorhandene Inhalte in der Datei ohne Warnung.

Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encoding

Gibt den Typ der Codierung für die Zieldatei an. Standardwert: utf8NoBOM.

Die zulässigen Werte für diesen Parameter sind wie folgt:

  • ascii: Verwendet die Codierung für den ASCII-Zeichensatz (7-Bit).
  • bigendianunicode: Codiert im UTF-16-Format mit der Big-Endian-Bytereihenfolge.
  • oem: Verwendet die Standardcodierung für MS-DOS- und Konsolenprogramme.
  • unicode: Codiert im UTF-16-Format unter Verwendung der Little-Endian-Bytereihenfolge.
  • utf7: Codiert im UTF-7-Format.
  • utf8: Codiert im UTF-8-Format.
  • utf8BOM: Codiert im UTF-8-Format mit Byte Order Mark (BOM)
  • utf8NoBOM: Codiert im UTF-8-Format ohne Byte order Mark (BOM)
  • utf32: Codiert im UTF-32-Format.

Ab PowerShell 6.2 lässt der Encoding-Parameter auch numerische IDs registrierter Codepages (z. B -Encoding 1251. ) oder Zeichenfolgennamen von registrierten Codepages (z. B -Encoding "windows-1251". ) zu. Weitere Informationen finden Sie in der .NET-Dokumentation für Encoding.CodePage.

Dieser Parameter wurde in PowerShell 7.2 eingeführt.

Hinweis

UTF-7* wird nicht mehr empfohlen. Ab PowerShell 7.1 wird eine Warnung ausgegeben, wenn Sie für den Encoding-Parameter angebenutf7.

Type:Encoding
Accepted values:ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:1
Default value:UTF8NoBOM
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilePath

Gibt eine Datei an, die dieses Cmdlet in Platzhalterzeichen speichert, die jedoch in eine einzelne Datei aufgelöst werden müssen.

Ab PowerShell 7 wird das InputObject in der Konsole gedruckt, wenn Sie filePath unter \\.\CON Windows oder /dev/tty auf Nicht-Windows-Systemen angeben. Diese Dateipfade entsprechen dem Konsolengerät des aktuellen Terminals auf dem System, sodass Sie das InputObject drucken und mit einem Befehl an den Ausgabestream senden können.

Type:String
Aliases:Path
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:True

-InputObject

Gibt das zu speichernde und anzuzeigende Objekt an. Geben Sie eine Variable ein, die die Objekte enthält, oder geben Sie einen Befehl oder einen Ausdruck ein, durch den die Objekte abgerufen werden. Sie können auch ein -Objekt an übergeben Tee-Object.

Wenn Sie den InputObject-Parameter mit Tee-Objectverwenden, anstatt Befehlsergebnisse an zu Tee-Objectleiten, wird der InputObject-Wert als einzelnes Objekt behandelt, auch wenn der Wert eine Auflistung ist.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

Gibt eine Datei an, in der dieses Cmdlet das Objekt speichert. Im Gegensatz zu FilePath wird der Wert des LiteralPath-Parameters genau wie eingegeben verwendet. Es werden keine Zeichen als Platzhalter interpretiert. Wenn der Pfad Escapezeichen enthält, müssen Sie ihn in einfache Anführungszeichen einschließen. Einfache Anführungszeichen weisen PowerShell an, keine Zeichen als Escapesequenzen zu interpretieren.

Type:String
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Variable

Gibt eine Variable an, in der das -Objekt vom Cmdlet gespeichert wird. Geben Sie einen Variablennamen ohne das vorangehende Dollarzeichen ($) ein.

Type:String
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Eingaben

PSObject

Sie können Objekte an dieses Cmdlet übergeben.

Ausgaben

PSObject

Dieses Cmdlet gibt das Objekt zurück, das umgeleitet wird.

Hinweise

PowerShell enthält die folgenden Aliase für Tee-Object:

  • Windows:
    • tee

Sie können auch das Out-File Cmdlet oder den Umleitungsoperator verwenden, die beide die Ausgabe in einer Datei speichern, aber nicht über die Pipeline senden.

Ab PowerShell 6 Tee-Object verwendet die UTF-8-Codierung ohne BOM, wenn in Dateien geschrieben wird. Wenn Sie eine andere Codierung benötigen, verwenden Sie das Out-File Cmdlet mit dem Encoding-Parameter .