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
È possibile inviare tramite pipe oggetti a questo cmdlet.
Output
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 .