Partage via


Tee-Object

Enregistre la sortie de commande dans un fichier ou une variable et l’envoie également vers le bas du pipeline.

Syntaxe

File (Par défaut)

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

Description

La Tee-Object sortie d’écriture de l’applet de commande dans deux directions. Il stocke la sortie dans un fichier ou une variable et l’envoie également vers le bas du pipeline. S’il Tee-Object s’agit de la dernière commande dans le pipeline, la sortie de la commande s’affiche dans la console.

En interne, Tee-Object utilise les commandes et Out-File les Set-Variable commandes. Ces commandes prennent en charge le paramètre WhatIf . La Tee-Object commande ne prend pas en charge le paramètre WhatIf . Toutefois, si vous encapsulez Tee-Object un script ou une fonction qui prend en charge le paramètre WhatIf, Tee-Object passe l’état de WhatIf aux commandes et Out-File aux Set-Variable commandes.

Exemples

Exemple 1 : Processus de sortie dans un fichier et dans la console

Cet exemple obtient une liste des processus en cours d’exécution sur l’ordinateur et envoie le résultat à un fichier. Étant donné qu’un deuxième chemin d’accès n’est pas spécifié, les processus sont également affichés dans la console.

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

Exemple 2 : Processus de sortie vers une variable et « Select-Object »

Cet exemple montre comment obtenir la liste des processus en cours d’exécution sur l’ordinateur, les enregistrer dans la variable $proc et les diriger vers Select-Object.

Get-Process notepad | Tee-Object -Variable proc | Select-Object ProcessName, Handles
ProcessName                              Handles
-----------                              -------
notepad                                  43
notepad                                  37
notepad                                  38
notepad                                  38

L’applet de commande Select-Object sélectionne les propriétés ProcessName et Handles. Notez que la variable $proc inclut les informations par défaut retournées par Get-Process.

Exemple 3 : Sortie des fichiers système vers deux fichiers journaux

Cet exemple montre comment enregistrer une liste de fichiers système dans deux fichiers journaux, un fichier cumulatif et un fichier actif.

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

La commande utilise l’applet de commande Get-ChildItem pour effectuer une recherche récursive des fichiers système sur le lecteur D : . Un opérateur de pipeline (|) envoie la liste à Tee-Object, qui ajoute la liste au fichier AllSystemFiles.txt et transmet la liste au pipeline à l’applet de commande Out-File, qui enregistre la liste dans le NewSystemFiles.txt file.

Exemple 4 : Imprimer la sortie dans la console et l’utiliser dans le pipeline

Cet exemple obtient les fichiers d’un dossier, les imprime dans la console, puis filtre les fichiers pour ceux qui ont un bloc de métadonnées front matter défini. Enfin, il répertorie les noms des articles qui ont de l’avant.

$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

L’exemple montre comment définir la variable $consoleDevice sur la valeur de l’appareil console du terminal actuel. Sur Windows, vous pouvez écrire sur l’appareil de console actuel en redirigeant votre sortie vers le chemin de fichier \\.\CON. Sur les systèmes non-Windows, vous utilisez le chemin de fichier /dev/tty.

Ensuite, il définit la variable $frontMatterPattern sur une expression régulière qui correspond lorsqu’une chaîne commence par trois tirets (---) et a tout contenu avant trois tirets. Lorsque ce modèle correspond au contenu d’un article, l’article a un bloc de métadonnées front matter défini.

Ensuite, l’exemple utilise Get-ChildItem pour récupérer chaque fichier dans le dossier About. Tee-Object imprime les résultats redirigés vers la console à l’aide du paramètre FileName. Where-Object filtre les fichiers en obtenant leur contenu en tant que chaîne unique avec le paramètre Raw de Get-Content et en comparant cette chaîne à $frontMatterPattern.

Enfin, l’exemple imprime les noms des fichiers dans le dossier qui ont un bloc de métadonnées front matter défini.

Exemple 5 : Utiliser « Tee-Object » dans un script avec le paramètre **WhatIf**

La Tee-Object commande ne prend pas en charge le paramètre WhatIf . Toutefois, si vous encapsulez Tee-Object un script ou une fonction qui prend en charge le paramètre WhatIf , Tee-Object passez l’état de WhatIf aux Set-VariableOut-File commandes qu’il utilise en interne.

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

Paramètres

-Append

Indique que l’applet de commande ajoute la sortie au fichier spécifié. Sans ce paramètre, le nouveau contenu remplace tout contenu existant dans le fichier sans avertissement.

Ce paramètre a été introduit dans Windows PowerShell 3.0.

Propriétés du paramètre

Type:SwitchParameter
Valeur par défaut:False
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

File
Position:Named
Obligatoire:False
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-Encoding

Spécifie le type d’encodage du fichier cible. La valeur par défaut est utf8NoBOM.

Les valeurs acceptables pour ce paramètre sont les suivantes :

  • ascii: utilise l’encodage pour le jeu de caractères ASCII (7 bits).
  • ansi: Utilise l’encodage de la page de codes ANSI de la culture actuelle. Cette option a été ajoutée dans PowerShell 7.4.
  • bigendianunicode: encode au format UTF-16 avec primauté des octets de poids fort.
  • oem: utilise l’encodage par défaut pour les programmes MS-DOS et console.
  • unicode: encode au format UTF-16 avec primauté des octets de poids faible.
  • utf7: encode au format UTF-7.
  • utf8: encode au format UTF-8.
  • utf8BOM: encode au format UTF-8 avec indicateur d'ordre des octets (BOM)
  • utf8NoBOM: encode au format UTF-8 sans marque d’ordre d’octet (BOM)
  • utf32: encode au format UTF-32.

À compter de PowerShell 6.2, le paramètre d’encodage autorise également des ID numériques de pages de codes inscrites (comme -Encoding 1251) ou des noms de chaînes de pages de codes inscrites (comme -Encoding "windows-1251"). Pour plus d’informations, consultez la documentation .NET pour Encoding.CodePage.

À compter de PowerShell 7.4, vous pouvez utiliser la valeur Ansi pour le paramètre d’encodage afin de transmettre l’ID numérique de la page de codes ANSI de l'actuelle culture sans avoir à le spécifier manuellement.

Ce paramètre a été introduit dans PowerShell 7.2.

Remarque

UTF-7* n’est plus recommandé d’utiliser. À partir de PowerShell 7.1, un avertissement est écrit si vous spécifiez utf7 pour le paramètre d’encodage .

Propriétés du paramètre

Type:Encoding
Valeur par défaut:UTF8NoBOM
Valeurs acceptées:ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:1
Obligatoire:False
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-FilePath

Spécifie un fichier que cette applet de commande enregistre l’objet dans des caractères génériques autorisés, mais doit être résolu en un seul fichier.

À compter de PowerShell 7, lorsque vous spécifiez le FilePath comme \\.\CON sur Windows ou /dev/tty sur des systèmes non-Windows, le InputObject est imprimé dans la console. Ces chemins de fichier correspondent à l’appareil console du terminal actuel sur le système, ce qui vous permet d’imprimer le InputObject et de l’envoyer au flux de sortie avec une seule commande.

Propriétés du paramètre

Type:String
Valeur par défaut:None
Prend en charge les caractères génériques:True
DontShow:False
Alias:Chemin

Jeux de paramètres

File
Position:0
Obligatoire:True
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-InputObject

Spécifie l’objet à enregistrer et à afficher. Entrez une variable qui contient les objets ou tapez une commande ou une expression qui obtient les objets. Vous pouvez également diriger un objet vers Tee-Object.

Lorsque vous utilisez le paramètre InputObject avec Tee-Object, au lieu de passer à Tee-Object, la valeur InputObject est traitée comme un seul objet, même si la valeur est une collection.

Propriétés du paramètre

Type:PSObject
Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:Named
Obligatoire:False
Valeur du pipeline:True
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-LiteralPath

Spécifie un fichier dans lequel cette applet de commande enregistre l’objet. Contrairement à FilePath, la valeur du paramètre LiteralPath est utilisée exactement comme il est typé. Aucun caractère n’est interprété en tant que caractère générique. Si le chemin d’accès inclut des caractères d’échappement, mettez-le entre des guillemets simples. Les guillemets simples indiquent à PowerShell de ne pas interpréter de caractères comme séquences d’échappement.

Propriétés du paramètre

Type:String
Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False
Alias:PSPath, DP

Jeux de paramètres

LiteralFile
Position:Named
Obligatoire:True
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-Variable

Spécifie une variable dans laquelle l’applet de commande enregistre l’objet. Entrez un nom de variable sans le signe dollar précédent ($).

Propriétés du paramètre

Type:String
Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

Variable
Position:Named
Obligatoire:True
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

CommonParameters

Cette applet de commande prend en charge les paramètres courants : -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction et -WarningVariable. Pour plus d’informations, consultez about_CommonParameters.

Entrées

PSObject

Vous pouvez diriger des objets vers cette applet de commande.

Sorties

PSObject

Cette applet de commande retourne l’objet qu’il redirige.

Notes

PowerShell inclut les alias suivants pour Tee-Object:

  • Windows :
    • tee

Vous pouvez également utiliser l’applet de commande Out-File ou l’opérateur de redirection, qui enregistrent la sortie dans un fichier, mais ne l’envoient pas dans le pipeline.

À compter de PowerShell 6, Tee-Object utilise l’encodage UTF-8 sans boM lorsqu’il écrit dans des fichiers. Si vous avez besoin d’un autre encodage, utilisez l’applet de commande Out-File avec le paramètre Encoding.