Condividi tramite


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 FilePath, il valore del parametro LiteralPath viene usato esattamente come viene digitato. Nessun carattere viene interpretato come metacaratteri. Se il percorso include caratteri di escape, racchiudilo tra virgolette singole. Le virgolette singole indicano a PowerShell di non interpretare alcun carattere come sequenze di escape.

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.