Tee-Object
Speichert die Befehlsausgabe in einer Datei oder Variable und sendet sie auch an die Pipeline.
Syntax
File (Standardwert)
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>]
Beschreibung
Das Tee-Object Cmdlet schreibt die Ausgabe in zwei Richtungen. Sie speichert die Ausgabe in einer Datei oder Variable und sendet sie auch an die Pipeline. Wenn Tee-Object es sich um den letzten Befehl in der Pipeline handelt, wird die Befehlsausgabe in der Konsole angezeigt.
Tee-Object Intern werden die Set-Variable Befehle und Out-File Befehle verwendet. Diese Befehle unterstützen den WhatIf-Parameter . Der Tee-Object Befehl unterstützt nicht den WhatIf-Parameter . Wenn Sie jedoch in ein Skript oder eine Funktion umbrechen Tee-Object , das den WhatIf-Parameter unterstützt, Tee-Object wird der Status " WhatIf" an die Set-Variable Und-Befehle Out-File übergeben.
Beispiele
Beispiel 1: Ausgabeprozesse in eine Datei und an die Konsole
In diesem Beispiel wird eine Liste der prozesse, 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 Prozesse, die auf dem Computer ausgeführt werden, in der $proc Variablen gespeichert und in Select-Objectrohrt.
Get-Process notepad | Tee-Object -Variable proc | Select-Object ProcessName, Handles
ProcessName Handles
----------- -------
notepad 43
notepad 37
notepad 38
notepad 38
Das cmdlet Select-Object wählt die ProcessName- und Behandelt Eigenschaften aus. Beachten Sie, dass die $proc Variable die Standardinformationen enthält, die von Get-Processzurückgegeben werden.
Beispiel 3: Ausgabesystemdateien in zwei Protokolldateien
In diesem Beispiel wird eine Liste von Systemdateien in zwei Protokolldateien, einer kumulativen Datei und einer aktuellen Datei gespeichert.
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 Cmdlet Get-ChildItem, um eine rekursive Suche nach Systemdateien auf dem Laufwerk D: durchzuführen. Ein Pipelineoperator (|) sendet die Liste an Tee-Object, die die Liste an die AllSystemFiles.txt Datei angibt und die Liste an das Cmdlet Out-File weitergibt, wodurch die Liste in der NewSystemFiles.txt filegespeichert wird.
Beispiel 4: Drucken der Ausgabe in der Konsole und Verwendung in der Pipeline
In diesem Beispiel werden die Dateien in einem Ordner abgerufen, in der Konsole gedruckt, dann werden die Dateien für diejenigen 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 Die Ausgabe an den \\.\CON Dateipfad umleiten. Auf Nicht-Windows-Systemen verwenden Sie den /dev/tty Filepath.
Anschließend wird die $frontMatterPattern Variable auf einen regulären Ausdruck festgelegt, der übereinstimmt, wenn eine Zeichenfolge mit drei Gedankenstrichen (---) beginnt und vor anderen drei Gedankenstrichen inhalt hat. Wenn dieses Muster mit dem Inhalt eines Artikels übereinstimmt, weist der Artikel einen definierten Metadatenblock für die Front-Materie auf.
Als Nächstes verwendet das Beispiel Get-ChildItem, um jede Datei im ordner About abzurufen.
Tee-Object druckt die weitergeleiteten Ergebnisse mithilfe des FileName-Parameters an die Konsole.
Where-Object filtert die Dateien, indem sie ihren Inhalt als einzelne Zeichenfolge mit dem Parameter Raw von Get-Content abrufen und diese Zeichenfolge mit $frontMatterPatternvergleichen.
Schließlich druckt das Beispiel die Namen der Dateien im Ordner mit einem definierten Front-Matter-Metadatenblock.
Beispiel 5: Verwenden von 'Tee-Object' in einem Skript mit dem Parameter **WhatIf**
Der Tee-Object Befehl unterstützt nicht den WhatIf-Parameter . Wenn Sie jedoch in ein Skript oder eine Funktion umbrechen Tee-Object , das den WhatIf-Parameter unterstützt, Tee-Object wird der Status " WhatIf" an die Set-Variable intern verwendeten Befehle Out-File übergeben.
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 ''
Parameter
-Append
Gibt an, dass das Cmdlet die Ausgabe an die angegebene Datei angibt. Ohne diesen Parameter ersetzt der neue Inhalt vorhandene Inhalte in der Datei ohne Warnung.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Parametereigenschaften
| Typ: | SwitchParameter |
| Standardwert: | False |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
File
| Position: | Named |
| Obligatorisch.: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-Encoding
Gibt den Typ der Codierung für die Zieldatei an. Der Standardwert ist utf8NoBOM.
Die zulässigen Werte für diesen Parameter sind wie folgt:
-
ascii: Verwendet die Codierung für den ASCII-Zeichensatz (7-Bit). -
ansi: Verwendet die Kodierung für die ANSI-Codepage der aktuellen Kultur. Diese Option wurde in PowerShell 7.4 hinzugefügt. -
bigendianunicode: Codiert im UTF-16-Format mithilfe der Big-Endian-Byte-Reihenfolge. -
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 ermöglicht der parameter Encoding auch numerische IDs registrierter Codeseiten (z. B. -Encoding 1251) oder Zeichenfolgennamen registrierter Codeseiten (z. B. -Encoding "windows-1251"). Weitere Informationen finden Sie in der .NET-Dokumentation für Encoding.CodePage-.
Ab PowerShell 7.4 können Sie den Ansi Wert für den parameter Encoding verwenden, um die numerische ID für die ANSI-Codeseite der aktuellen Kultur zu übergeben, ohne sie manuell angeben zu müssen.
Dieser Parameter wurde in PowerShell 7.2 eingeführt.
Hinweis
Die Verwendung von UTF-7* wird nicht mehr empfohlen. Ab PowerShell 7.1 wird eine Warnung geschrieben, wenn Sie utf7 für den parameter Encoding angeben.
Parametereigenschaften
| Typ: | Encoding |
| Standardwert: | UTF8NoBOM |
| Zulässige Werte: | ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | 1 |
| Obligatorisch.: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-FilePath
Gibt eine Datei an, die das Objekt in Wildcardzeichen speichert, ist zulässig, muss jedoch in eine einzelne Datei aufgelöst werden.
Ab PowerShell 7 wird das InputObject- in der Konsole gedruckt, wenn Sie den \\.\CON als /dev/tty unter Windows oder auf Nicht-Windows-Systemen angeben. Diese Dateipfade entsprechen dem Konsolengerät des aktuellen Terminals auf dem System, sodass Sie die InputObject- drucken und mit einem Befehl an den Ausgabedatenstrom senden können.
Parametereigenschaften
| Typ: | String |
| Standardwert: | None |
| Unterstützt Platzhalter: | True |
| Nicht anzeigen: | False |
| Aliase: | Pfad |
Parametersätze
File
| Position: | 0 |
| Obligatorisch.: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-InputObject
Gibt das objekt an, das gespeichert und angezeigt werden soll. 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 ein Objekt auch an Tee-Objectpfeifen.
Wenn Sie den InputObject Parameter mit Tee-Objectverwenden, anstatt Befehlsergebnisse an Tee-Objectzu übergeben, wird der InputObject-wert als einzelnes Objekt behandelt, auch wenn der Wert eine Auflistung ist.
Parametereigenschaften
| Typ: | PSObject |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch.: | False |
| Wert aus Pipeline: | True |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-LiteralPath
Gibt eine Datei an, in der dieses Cmdlet das Objekt speichert. Im Gegensatz zu FilePath-wird der Wert des LiteralPath--Parameters genau so verwendet, wie er eingegeben wird. Es werden keine Zeichen als Wildcards interpretiert. Wenn der Pfad Escapezeichen enthält, müssen Sie ihn in einfache Anführungszeichen einschließen. Einfache Anführungszeichen signalisieren PowerShell, dass keine Zeichen als Escapesequenzen interpretiert werden sollen.
Parametereigenschaften
| Typ: | String |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
| Aliase: | PSPath, EP |
Parametersätze
LiteralFile
| Position: | Named |
| Obligatorisch.: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-Variable
Gibt eine Variable an, in der das Cmdlet das Objekt speichert. Geben Sie einen Variablennamen ohne das vorangehende Dollarzeichen ($) ein.
Parametereigenschaften
| Typ: | String |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
Variable
| Position: | Named |
| Obligatorisch.: | True |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
CommonParameters
Dieses Cmdlet unterstützt die allgemeinen Parameter -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction und -WarningVariable. Weitere Informationen findest du unter about_CommonParameters.
Eingaben
PSObject
Sie können Objekte an dieses Cmdlet weiterleiten.
Ausgaben
PSObject
Dieses Cmdlet gibt das Objekt zurück, das es umleitet.
Hinweise
PowerShell enthält die folgenden Aliase für Tee-Object:
- Fenster:
tee
Sie können auch das Cmdlet Out-File oder den Umleitungsoperator verwenden, von denen beide die Ausgabe in einer Datei speichern, aber nicht an die Pipeline senden.
Ab PowerShell 6 verwendet Tee-Object beim Schreiben in Dateien BOM-weniger UTF-8-Codierung. Wenn Sie eine andere Codierung benötigen, verwenden Sie das cmdlet Out-File mit dem parameter Encoding.