Tee-Object
Salva l'output dei comandi in un file o in una variabile e lo invia anche nella pipeline.
Sintassi
File (impostazione predefinita).
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>]
Descrizione
L'output di scrittura del Tee-Object cmdlet in due direzioni. Archivia l'output in un file o in una variabile e lo invia anche nella pipeline. Se Tee-Object è l'ultimo comando nella pipeline, l'output del comando viene visualizzato nella console.
Internamente, Tee-Object usa i Set-Variable comandi e Out-File . Questi comandi supportano il parametro WhatIf . Il Tee-Object comando non supporta il parametro WhatIf . Tuttavia, se si esegue il wrapping Tee-Object in uno script o in una funzione che supporta il parametro WhatIf , Tee-Object passa lo stato di WhatIf ai Set-Variable comandi e Out-File .
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 viene 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 variabile $proc 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 cmdlet Select-Object seleziona le proprietà ProcessName e handle di . Si noti che la variabile $proc 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 cmdlet Get-ChildItem 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 di AllSystemFiles.txt e passa l'elenco verso il basso la pipeline al cmdlet Out-File, che salva l'elenco nell'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 variabile $consoleDevice viene impostata sul valore del dispositivo console del terminale corrente. In Windows è possibile scrivere nel dispositivo console corrente reindirizzando l'output al percorso file \\.\CON. Nei sistemi non Windows si usa il percorso file /dev/tty.
Imposta quindi la variabile $frontMatterPattern 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 quindi Get-ChildItem per recuperare ogni file nella cartella About.
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.
Esempio 5: Usare 'Tee-Object' in uno script con il parametro **WhatIf**
Il Tee-Object comando non supporta il parametro WhatIf . Tuttavia, se si esegue il wrapping Tee-Object in uno script o in una funzione che supporta il parametro WhatIf , Tee-Object passa lo stato di WhatIf ai Set-Variable comandi e Out-File viene usato internamente.
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 ''
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 alcun avviso.
Questo parametro è stato introdotto in Windows PowerShell 3.0.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | False |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
File
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | 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 la pagina di codice ANSI della cultura corrente. Questa opzione è stata aggiunta in PowerShell 7.4. -
bigendianunicode: Codifica nel formato UTF-16 utilizzando 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 nel formato UTF-7. -
utf8: codifica in formato UTF-8. -
utf8BOM: codifica in formato UTF-8 con la marca d'ordine dei byte (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 -Encoding 1251) o nomi di stringhe di tabelle codici registrate (ad esempio -Encoding "windows-1251"). Per altre informazioni, vedere la documentazione di .NET per Encoding.CodePage.
A partire da PowerShell 7.4, è possibile usare il valore Ansi per il parametro Codifica per passare l'ID numerico della pagina codice ANSI della cultura corrente senza doverlo specificare manualmente.
Questo parametro è stato introdotto in PowerShell 7.2.
Annotazioni
Non è più consigliabile utilizzare UTF-7 *. A partire da PowerShell 7.1, viene scritto un avviso se si specifica utf7 per il parametro Encoding.
Proprietà dei parametri
| Tipo: | Encoding |
| Valore predefinito: | UTF8NoBOM |
| Valori accettati: | ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | 1 |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | 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 il FilePath come \\.\CON in Windows o /dev/tty in sistemi non Windows, il InputObject viene stampato nella console. Questi percorsi di file corrispondono al dispositivo console del terminale corrente nel sistema, consentendo di stampare il InputObject e inviarlo al flusso di output con un comando.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | True |
| DontShow: | False |
| Alias: | Percorso |
Set di parametri
File
| Posizione: | 0 |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-InputObject
Specifica l'oggetto da salvare e visualizzare. Immettere una variabile contenente gli oggetti o 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, invece di eseguire il piping dei risultati del comando per Tee-Object, il valore InputObject viene considerato come un singolo oggetto anche se il valore è un insieme.
Proprietà dei parametri
| Tipo: | PSObject |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | True |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-LiteralPath
Specifica un file in cui questo cmdlet salva l'oggetto. A differenza di
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | PSPath, UP |
Set di parametri
LiteralFile
| Posizione: | Named |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Variable
Specifica una variabile in cui il cmdlet salva l'oggetto. Immettere un nome di variabile senza il segno di dollaro precedente ($).
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
Variable
| Posizione: | Named |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
CommonParameters
Questo cmdlet supporta i parametri comuni: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Per altre informazioni, vedi about_CommonParameters.
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 cmdlet Out-File 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 cmdlet Out-File con il parametro Encoding.