Condividi tramite


Tee-Object

Salva l'output del comando in un file o in una variabile e lo invia anche attraverso la pipeline.

Sintassi

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

Descrizione

Il Tee-Object cmdlet reindirizza l'output, ovvero invia l'output di un comando in due direzioni, ad esempio la lettera T. Salva l'output in un file o in una variabile e lo invia anche attraverso la pipeline. Se Tee-Object è l'ultimo comando nella pipeline, l'output del comando viene visualizzato al prompt.

Esempio

Esempio 1: Processi di output in un file e nella console

Questo esempio ottiene un elenco dei processi in esecuzione nel computer e invia il risultato a un file. Poiché non è specificato un secondo percorso, i processi vengono visualizzati anche nella 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
...

Esempio 2: Processi di output in una variabile e 'Select-Object'

Questo esempio ottiene un elenco dei processi in esecuzione nel computer, li salva nella $proc variabile e li invia tramite pipe a Select-Object.

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

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

Il Select-Object cmdlet seleziona le proprietà ProcessName e Handle . Si noti che la $proc variabile include le informazioni predefinite restituite da Get-Process.

Esempio 3: Eseguire l'output dei file di sistema in due file di log

In questo esempio viene salvato un elenco di file di sistema in due file di log, un file cumulativo e un file corrente.

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

Il comando usa il Get-ChildItem cmdlet per eseguire una ricerca ricorsiva dei file di sistema nell'unità D: . Un operatore pipeline (|) invia l'elenco a Tee-Object, che aggiunge l'elenco al file AllSystemFiles.txt e passa l'elenco verso il basso la pipeline al Out-File cmdlet , che salva l'elenco nell'oggetto NewSystemFiles.txt file.

Esempio 4: Stampare l'output nella console e usarlo nella pipeline

Questo esempio ottiene i file in una cartella, li stampa nella console, quindi filtra i file per quelli con un blocco di metadati front-matter definito. Infine, elenca i nomi degli articoli che hanno la materia principale.

$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

Nell'esempio la $consoleDevice variabile viene impostata sul valore del dispositivo console del terminale corrente. In Windows è possibile scrivere nel dispositivo console corrente reindirizzando l'output \\.\CON al percorso file. Nei sistemi non Windows si usa il /dev/tty percorso file.

Imposta quindi la $frontMatterPattern variabile su un'espressione regolare che corrisponde quando una stringa inizia con tre trattini (---) e ha contenuto prima di altri tre trattini. Quando questo modello corrisponde al contenuto di un articolo, l'articolo ha un blocco di metadati front-matter definito.

L'esempio usa Get-ChildItem quindi per recuperare ogni file nella About cartella . Tee-Object stampa i risultati inviati tramite pipe alla console usando il parametro FileName . Where-Object filtra i file recuperando il contenuto come singola stringa con il parametro Raw di Get-Content e confrontando tale stringa con $frontMatterPattern.

Infine, nell'esempio vengono stampati i nomi dei file nella cartella con un blocco di metadati front-matter definito.

Parametri

-Append

Indica che il cmdlet aggiunge l'output al file specificato. Senza questo parametro, il nuovo contenuto sostituisce qualsiasi contenuto esistente nel file senza avviso.

Questo parametro è stato introdotto in Windows PowerShell 3.0.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:False
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Encoding

Specifica il tipo di codifica per il file di destinazione. Il valore predefinito è utf8NoBOM.

I valori accettabili per questo parametro sono i seguenti:

  • ascii: usa la codifica per il set di caratteri ASCII (a 7 bit).
  • ansi: usa la codifica per per la tabella codici ANSI delle impostazioni cultura correnti. Questa opzione è stata aggiunta in PowerShell 7.4.
  • bigendianunicode: codifica in formato UTF-16 usando l'ordine dei byte big-endian.
  • oem: usa la codifica predefinita per i programmi MS-DOS e console.
  • unicode: codifica in formato UTF-16 usando l'ordine dei byte little-endian.
  • utf7: codifica in formato UTF-7.
  • utf8: codifica in formato UTF-8.
  • utf8BOM: codifica in formato UTF-8 con byte order mark (BOM)
  • utf8NoBOM: codifica in formato UTF-8 senza byte order mark (BOM)
  • utf32: codifica in formato UTF-32.

A partire da PowerShell 6.2, il parametro Encoding consente anche ID numerici di tabelle codici registrate (ad esempio ) o nomi di stringhe di tabelle codici registrate (ad esempio -Encoding 1251-Encoding "windows-1251"). Per altre informazioni, vedere la documentazione di .NET per Encoding.CodePage.

A partire da PowerShell 7.4, è possibile usare il Ansi valore per il parametro Encoding per passare l'ID numerico per la tabella codici ANSI delle impostazioni cultura correnti senza doverlo specificare manualmente.

Questo parametro è stato introdotto in PowerShell 7.2.

Nota

UTF-7* non è più consigliato per l'uso. A partire da PowerShell 7.1, viene scritto un avviso se si specifica utf7 per il parametro Encoding .

Tipo:Encoding
Valori accettati:ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Posizione:1
Valore predefinito:UTF8NoBOM
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-FilePath

Specifica un file che questo cmdlet salva l'oggetto in caratteri jolly, ma deve essere risolto in un singolo file.

A partire da PowerShell 7, quando si specifica FilePath come \\.\CON in sistemi Windows o /dev/tty non Windows, inputObject viene stampato nella console. Tali percorsi di file corrispondono al dispositivo console del terminale corrente nel sistema, consentendo di stampare InputObject e inviarlo al flusso di output con un comando.

Tipo:String
Alias:Path
Posizione:0
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly:True

-InputObject

Specifica l'oggetto da salvare e visualizzare. Immettere una variabile che contiene gli oggetti oppure digitare un comando o un'espressione che ottiene gli oggetti. È anche possibile inviare tramite pipe un oggetto a Tee-Object.

Quando si usa il parametro InputObject con Tee-Object, anziché eseguire il piping dei risultati del comando a Tee-Object, il valore InputObject viene considerato come un singolo oggetto anche se il valore è una raccolta.

Tipo:PSObject
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:True
Accettare caratteri jolly:False

-LiteralPath

Specifica un file in cui questo cmdlet salva l'oggetto. A differenza di FilePath, il valore del parametro LiteralPath viene usato esattamente come viene tipizzato. Nessun carattere viene interpretato come carattere jolly. Se il percorso include caratteri di escape, racchiuderlo tra virgolette singole. Le virgolette singole indicano a PowerShell di non interpretare alcun carattere come sequenze di escape.

Tipo:String
Alias:PSPath, LP
Posizione:Named
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Variable

Specifica una variabile in cui il cmdlet salva l'oggetto. Immettere un nome di variabile senza il segno di dollaro precedente ($).

Tipo:String
Posizione:Named
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

Input

PSObject

È possibile inviare tramite pipe oggetti a questo cmdlet.

Output

PSObject

Questo cmdlet restituisce l'oggetto che reindirizza.

Note

PowerShell include gli alias seguenti per Tee-Object:

  • Windows:
    • tee

È anche possibile usare il Out-File cmdlet o l'operatore di reindirizzamento, entrambi i quali salvano l'output in un file ma non lo inviano alla pipeline.

A partire da PowerShell 6, Tee-Object usa la codifica UTF-8 senza BOM quando scrive nei file. Se è necessaria una codifica diversa, usare il Out-File cmdlet con il parametro Encoding .