Bagikan melalui


Tee-Object

Menyimpan output perintah dalam file atau variabel dan juga mengirimkannya ke alur.

Sintaks

File (Default)

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

Deskripsi

Output Tee-Object penulisan cmdlet dalam dua arah. Ini menyimpan output dalam file atau variabel dan juga mengirimkannya ke alur. Jika Tee-Object adalah perintah terakhir dalam alur, output perintah ditampilkan di konsol.

Secara internal, Tee-Object menggunakan Set-Variable perintah dan Out-File . Perintah ini mendukung parameter WhatIf . Perintah Tee-Object tidak mendukung parameter WhatIf . Namun, jika Anda membungkus Tee-Object dalam skrip atau fungsi yang mendukung parameter WhatIf , Tee-Object meneruskan status WhatIf ke Set-Variable perintah dan Out-File .

Contoh

Contoh 1: Proses output ke file dan ke konsol

Contoh ini mendapatkan daftar proses yang berjalan di komputer dan mengirim hasilnya ke file. Karena jalur kedua tidak ditentukan, proses juga ditampilkan di konsol.

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

Contoh 2: Proses output ke variabel dan 'Select-Object'

Contoh ini mendapatkan daftar proses yang berjalan di komputer, menyimpannya ke variabel $proc, dan menyalurkannya ke Select-Object.

Get-Process notepad | Tee-Object -Variable proc | Select-Object ProcessName, Handles
ProcessName                              Handles
-----------                              -------
notepad                                  43
notepad                                  37
notepad                                  38
notepad                                  38

Cmdlet Select-Object memilih ProcessName dan Menangani properti. Perhatikan bahwa variabel $proc menyertakan informasi default yang dikembalikan oleh Get-Process.

Contoh 3: File sistem output ke dua file log

Contoh ini menyimpan daftar file sistem dalam dua file log, file kumulatif, dan file saat ini.

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

Perintah menggunakan cmdlet Get-ChildItem untuk melakukan pencarian rekursif untuk file sistem pada drive D: . Operator alur (|) mengirim daftar ke Tee-Object, yang menambahkan daftar ke file AllSystemFiles.txt dan meneruskan daftar ke bawah alur ke cmdlet Out-File, yang menyimpan daftar di NewSystemFiles.txt file.

Contoh 4: Cetak output ke konsol dan gunakan dalam alur

Contoh ini mendapatkan file dalam folder, mencetaknya ke konsol, lalu memfilter file untuk file yang memiliki blok metadata front matter yang ditentukan. Akhirnya, ia mencantumkan nama artikel yang memiliki materi depan.

$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

Contoh mengatur variabel $consoleDevice ke nilai perangkat konsol terminal saat ini. Di Windows, Anda dapat menulis ke perangkat konsol saat ini dengan mengalihkan output Anda ke filepath \\.\CON. Pada sistem non-Windows, Anda menggunakan jalur file /dev/tty.

Kemudian mengatur variabel $frontMatterPattern ke ekspresi reguler yang cocok ketika string dimulai dengan tiga tanda hubung (---) dan memiliki konten apa pun sebelum tiga tanda hubung lainnya. Ketika pola ini cocok dengan konten artikel, artikel memiliki blok metadata front matter yang ditentukan.

Selanjutnya, contoh menggunakan Get-ChildItem untuk mengambil setiap file di folder About. Tee-Object mencetak hasil piped ke konsol menggunakan parameter FileName. Where-Object memfilter file dengan mendapatkan kontennya sebagai string tunggal dengan parameter RawGet-Content dan membandingkan string tersebut dengan $frontMatterPattern.

Terakhir, contoh mencetak nama file di folder yang memiliki blok metadata front matter yang ditentukan.

Contoh 5: Gunakan 'Tee-Object' dalam skrip dengan parameter **WhatIf**

Perintah Tee-Object tidak mendukung parameter WhatIf . Namun, jika Anda membungkus Tee-Object dalam skrip atau fungsi yang mendukung parameter WhatIf , Tee-Object meneruskan status WhatIf ke Set-Variable perintah dan Out-File yang digunakannya secara internal.

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

Parameter

-Append

Menunjukkan bahwa cmdlet menambahkan output ke file yang ditentukan. Tanpa parameter ini, konten baru menggantikan konten yang ada dalam file tanpa peringatan.

Parameter ini diperkenalkan di Windows PowerShell 3.0.

Properti parameter

Jenis:SwitchParameter
Nilai default:False
Mendukung wildcard:False
DontShow:False

Set parameter

File
Position:Named
Wajib:False
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False

-Encoding

Menentukan jenis pengodean untuk file target. Nilai defaultnya adalah utf8NoBOM.

Nilai yang dapat diterima untuk parameter ini adalah sebagai berikut:

  • ascii: Menggunakan pengodean untuk set karakter ASCII (7-bit).
  • ansi: Menggunakan pengodean untuk halaman kode ANSI budaya saat ini. Opsi ini ditambahkan di PowerShell 7.4.
  • bigendianunicode: Mengenkripsi dalam format UTF-16 menggunakan urutan byte big-endian.
  • oem: Menggunakan pengkodean default untuk program MS-DOS dan program konsol.
  • unicode: Mengode dalam format UTF-16 menggunakan urutan byte little-endian.
  • utf7: Mengodekan dalam format UTF-7.
  • utf8: Mengodekan dalam format UTF-8.
  • utf8BOM: Mengodekan dalam format UTF-8 dengan Byte Order Mark (BOM)
  • utf8NoBOM: Mengodekan dalam format UTF-8 tanpa Byte Order Mark (BOM)
  • utf32: Mengodekan dalam format UTF-32.

Dimulai dengan PowerShell 6.2, parameter Pengodean juga memungkinkan ID numerik halaman kode terdaftar (seperti ) atau nama string halaman kode terdaftar (seperti ). Untuk informasi selengkapnya, lihat dokumentasi .NET untuk Encoding.CodePage.

Dimulai dengan PowerShell 7.4, Anda dapat menggunakan nilai untuk parameter Pengodean untuk meneruskan ID numerik untuk halaman kode ANSI budaya saat ini tanpa harus menentukannya secara manual.

Parameter ini diperkenalkan di PowerShell 7.2.

Nota

UTF-7* tidak lagi disarankan untuk digunakan. Sejak PowerShell 7.1, sebuah peringatan akan ditulis jika Anda menentukan utf7 untuk parameter Pengodean .

Properti parameter

Jenis:Encoding
Nilai default:UTF8NoBOM
Nilai yang diterima:ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Mendukung wildcard:False
DontShow:False

Set parameter

(All)
Position:1
Wajib:False
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False

-FilePath

Menentukan file yang cmdlet ini menyimpan objek ke karakter Wildcard diizinkan, tetapi harus diselesaikan ke satu file.

Dimulai di PowerShell 7, saat Anda menentukan FilePath sebagai \\.\CON pada Windows atau /dev/tty pada sistem non-Windows, InputObject dicetak di konsol. Jalur file tersebut sesuai dengan perangkat konsol terminal saat ini pada sistem, memungkinkan Anda mencetak InputObject dan mengirimkannya ke aliran output dengan satu perintah.

Properti parameter

Jenis:String
Nilai default:None
Mendukung wildcard:True
DontShow:False
Alias:Jalur

Set parameter

File
Position:0
Wajib:True
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False

-InputObject

Menentukan objek yang akan disimpan dan ditampilkan. Masukkan variabel yang berisi objek atau ketik perintah atau ekspresi yang mendapatkan objek. Anda juga dapat menyalurkan objek ke Tee-Object.

Saat Anda menggunakan parameter InputObject dengan Tee-Object, alih-alih hasil perintah pipa untuk Tee-Object, nilai InputObject diperlakukan sebagai objek tunggal meskipun nilainya adalah koleksi.

Properti parameter

Jenis:PSObject
Nilai default:None
Mendukung wildcard:False
DontShow:False

Set parameter

(All)
Position:Named
Wajib:False
Nilai dari alur:True
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False

-LiteralPath

Menentukan file tempat cmdlet ini menyimpan objek. Tidak seperti FilePath, nilai parameter LiteralPath digunakan persis seperti yang diketik. Tidak ada karakter yang ditafsirkan sebagai wildcard. Jika jalur menyertakan karakter escape, bungkus jalur tersebut dalam tanda kutip tunggal. Tanda kutip tunggal memberi tahu PowerShell untuk tidak menginterpretasikan karakter apa pun sebagai urutan escape.

Properti parameter

Jenis:String
Nilai default:None
Mendukung wildcard:False
DontShow:False
Alias:PSPath, LP

Set parameter

LiteralFile
Position:Named
Wajib:True
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False

-Variable

Menentukan variabel tempat cmdlet menyimpan objek. Masukkan nama variabel tanpa tanda dolar sebelumnya ($).

Properti parameter

Jenis:String
Nilai default:None
Mendukung wildcard:False
DontShow:False

Set parameter

Variable
Position:Named
Wajib:True
Nilai dari alur:False
Nilai dari alur berdasarkan nama properti:False
Nilai dari argumen yang tersisa:False

CommonParameters

Cmdlet ini mendukung parameter umum: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction, dan -WarningVariable. Untuk informasi selengkapnya, lihat about_CommonParameters.

Input

PSObject

Anda dapat menyalurkan objek ke cmdlet ini.

Output

PSObject

Cmdlet ini mengembalikan objek yang dialihkan.

Catatan

PowerShell menyertakan alias berikut untuk Tee-Object:

  • Windows:
    • tee

Anda juga dapat menggunakan cmdlet Out-File atau operator pengalihan, yang keduanya menyimpan output dalam file tetapi tidak mengirimkannya ke alur.

Dimulai di PowerShell 6, Tee-Object menggunakan pengodean UTF-8 tanpa BOM saat menulis ke file. Jika Anda memerlukan pengodean yang berbeda, gunakan cmdlet Out-File dengan parameter Pengodean.