Compartir a través de


Tee-Object

Guarda el resultado del comando en un archivo o una variable y también lo envía a la canalización.

Sintaxis

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

Description

El Tee-Object cmdlet redirige la salida, es decir, envía la salida de un comando en dos direcciones (como la letra T). Almacena el resultado en un archivo o una variable y también lo envía a la canalización. Si Tee-Object es el último comando de la canalización, la salida del comando se muestra en el símbolo del sistema.

Ejemplos

Ejemplo 1: Salida de procesos en un archivo y en la consola

En este ejemplo se obtiene una lista de los procesos que se ejecutan en el equipo y se envía el resultado a un archivo. Dado que no se ha especificado una segunda ruta de acceso, los procesos también se muestran en la consola.

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

Ejemplo 2: Salida de procesos en una variable y "Select-Object"

Este ejemplo obtiene una lista de los procesos que se ejecutan en el equipo, los guarda en la $proc variable y los canaliza a Select-Object.

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

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

El Select-Object cmdlet selecciona las propiedades ProcessName y Handles . Tenga en cuenta que la $proc variable incluye la información predeterminada devuelta por Get-Process.

Ejemplo 3: Salida de archivos del sistema a dos archivos de registro

En este ejemplo se guarda una lista de archivos del sistema en dos archivos de registro, un archivo acumulativo y un archivo actual.

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

El comando usa el Get-ChildItem cmdlet para realizar una búsqueda recursiva de archivos del sistema en la unidad D: . Un operador de canalización (|) envía la lista a Tee-Object, que anexa la lista al archivo AllSystemFiles.txt y pasa la lista por la canalización al Out-File cmdlet , que guarda la lista en NewSystemFiles.txt file.

Ejemplo 4: Impresión de la salida en la consola y uso en la canalización

En este ejemplo se obtienen los archivos de una carpeta, se imprimen en la consola y, a continuación, se filtran los archivos de los que tienen un bloque de metadatos de front-matter definido. Por último, enumera los nombres de los artículos que tienen una materia frontal.

$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

En el ejemplo se establece la $consoleDevice variable en el valor del dispositivo de consola del terminal actual. En Windows, puede escribir en el dispositivo de consola actual redirigiendo la salida a la ruta de acceso de \\.\CON archivo. En sistemas que no son de Windows, se usa la ruta de acceso a /dev/tty archivos.

A continuación, establece la $frontMatterPattern variable en una expresión regular que coincide cuando una cadena comienza con tres guiones (---) y tiene cualquier contenido antes de otros tres guiones. Cuando este patrón coincide con el contenido de un artículo, el artículo tiene un bloque de metadatos de front-matter definido.

A continuación, el ejemplo usa Get-ChildItem para recuperar todos los archivos de la About carpeta. Tee-Object imprime los resultados canalados en la consola mediante el parámetro FileName . Where-Object filtra los archivos obteniendo su contenido como una sola cadena con el parámetro Raw de Get-Content y comparando esa cadena con $frontMatterPattern.

Por último, en el ejemplo se imprimen los nombres de los archivos de la carpeta que tienen un bloque de metadatos de front-matter definido.

Parámetros

-Append

Indica que el cmdlet anexa la salida al archivo especificado. Sin este parámetro, el contenido nuevo reemplaza cualquier contenido existente en el archivo sin previo aviso.

Este parámetro se incorporó en Windows PowerShell 3.0.

Tipo:SwitchParameter
Posición:Named
Valor predeterminado:False
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-Encoding

Especifica el tipo de codificación del archivo de destino. El valor predeterminado es utf8NoBOM.

Los valores aceptables para este parámetro son los siguientes:

  • ascii: usa la codificación para el juego de caracteres ASCII (7 bits).
  • ansi: usa la codificación para la página de códigos ANSI de la referencia cultural actual. Esta opción se agregó en PowerShell 7.4.
  • bigendianunicode: codifica en formato UTF-16 mediante el orden de bytes big-endian.
  • oem: usa la codificación predeterminada para los programas de consola y MS-DOS.
  • unicode: codifica en formato UTF-16 mediante el orden de bytes little-endian.
  • utf7: codifica en formato UTF-7.
  • utf8: codifica en formato UTF-8.
  • utf8BOM: codifica en formato UTF-8 con marca de orden de bytes (BOM)
  • utf8NoBOM: codifica en formato UTF-8 sin marca de orden de bytes (BOM)
  • utf32: codifica en formato UTF-32.

A partir de PowerShell 6.2, el parámetro Encoding también permite identificadores numéricos de páginas de códigos registradas (como -Encoding 1251) o nombres de cadena de páginas de códigos registradas (como -Encoding "windows-1251"). Para obtener más información, consulte la documentación de .NET para Encoding.CodePage.

A partir de PowerShell 7.4, puede usar el Ansi valor del parámetro Encoding para pasar el identificador numérico de la página de códigos ANSI de la referencia cultural actual sin tener que especificarlo manualmente.

Este parámetro se introdujo en PowerShell 7.2.

Nota:

Ya no se recomienda usar UTF-7*. A partir de PowerShell 7.1, se escribe una advertencia si especifica utf7 para el parámetro Encoding .

Tipo:Encoding
Valores aceptados:ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Posición:1
Valor predeterminado:UTF8NoBOM
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-FilePath

Especifica un archivo que este cmdlet guarda el objeto en caracteres comodín, pero debe resolverse en un único archivo.

A partir de PowerShell 7, cuando se especifica FilePath como \\.\CON en windows o /dev/tty en sistemas que no son windows, inputObject se imprime en la consola. Esas rutas de acceso de archivo corresponden al dispositivo de consola del terminal actual en el sistema, lo que le permite imprimir inputObject y enviarlo al flujo de salida con un comando.

Tipo:String
Alias:Path
Posición:0
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:False
Aceptar caracteres comodín:True

-InputObject

Especifica el objeto que se va a guardar y mostrar. Especifique una variable que contenga los objetos, o escriba un comando o una expresión que obtenga los objetos. También puede canalizar un objeto a Tee-Object.

Cuando se usa el parámetro InputObject con Tee-Object, en lugar de canalizar los resultados del comando a Tee-Object, el valor InputObject se trata como un único objeto incluso si el valor es una colección.

Tipo:PSObject
Posición:Named
Valor predeterminado:None
Requerido:False
Aceptar entrada de canalización:True
Aceptar caracteres comodín:False

-LiteralPath

Especifica un archivo en el que este cmdlet guarda el objeto. A diferencia de FilePath, el valor del parámetro LiteralPath se usa exactamente como se escribe. Ninguno de los caracteres se interpreta como caracteres comodín. Si la ruta de acceso contiene caracteres de escape, escríbalos entre comillas simples. Las comillas simples indican a PowerShell que no interprete ningún carácter como secuencias de escape.

Tipo:String
Alias:PSPath, LP
Posición:Named
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-Variable

Especifica una variable en la que el cmdlet guarda el objeto. Escriba un nombre de variable sin el signo de dólar anterior ($).

Tipo:String
Posición:Named
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

Entradas

PSObject

Puede canalizar objetos a este cmdlet.

Salidas

PSObject

Este cmdlet devuelve el objeto que redirige.

Notas

PowerShell incluye los siguientes alias para Tee-Object:

  • Windows:
    • tee

También puede usar el cmdlet o el Out-File operador de redirección, ambos que guardan la salida en un archivo, pero no los envían a la canalización.

A partir de PowerShell 6, Tee-Object usa la codificación UTF-8 sin BOM cuando escribe en archivos. Si necesita una codificación diferente, use el Out-File cmdlet con el parámetro Encoding .