Tee-Object
はPowerShellのコマンドレットで、パイプライン内のデータをファイルや変数に保存しながら、そのまま次のコマンドにデータを渡すことができます。
名前の由来は、水の流れを分岐させる「T字管(Tee)」からきています。
これにより、データを一度に複数の用途に活用することが可能です。
基本構文
<コマンド> | Tee-Object -FilePath <ファイルパス> [-Append] [-InputObject <オブジェクト>] [-Variable <変数名>]
主なパラメーター
-FilePath
保存先のファイルパスを指定します。
指定したファイルが存在する場合、内容は上書きされます。-Append
ファイルの内容を上書きせず、データを追記します。-InputObject
パイプラインを使用せず、直接オブジェクトを指定して処理します。-Variable
データを変数に保存します。
主な用途
- デバッグやデータ確認
パイプラインの途中でデータを確認したいときに便利です。 - ログの保存
データをファイルに保存しつつ、パイプラインをそのまま続行できます。 - 一時的なデータ保存
途中結果を変数に保存しつつ、後続の処理にデータを渡せます。
使用例
ディレクトリ内容をファイルに保存しつつコンソールに表示
Get-ChildItem | Tee-Object -FilePath "output.txt"
このコマンドは、Get-ChildItem
の出力をファイルoutput.txt
に保存しながら、コンソールにも表示します。
プロセス一覧をファイルに追記
Get-Process | Tee-Object -FilePath "processes.txt" -Append
このコマンドは、現在実行中のプロセス一覧をファイルprocesses.txt
に追記します。
データを変数に保存および後続処理に渡す
Get-Service | Tee-Object -Variable services | Where-Object {$_.Status -eq "Running"}
この例では、Get-Service
の出力を変数$services
に保存しつつ、ステータスがRunning
のサービスだけをフィルタリングします。
ログファイル作成およびフィルタリング
Get-EventLog -LogName Application | Tee-Object -FilePath "application_log.txt" | Where-Object {$_.EntryType -eq "Error"}
この例では、Applicationログのすべてのエントリをapplication_log.txt
に保存し、エラータイプのログだけをコンソールに表示します。
デバッグ時の中間結果確認
Get-Process | Tee-Object -FilePath "process_log.txt" | Where-Object {$_.CPU -gt 100}
プロセスの情報をログファイルに保存しつつ、CPU使用率が100を超えるプロセスをフィルタリングします。
注意点
- パフォーマンスへの影響
大量のデータをファイルに書き込む場合、I/O操作の影響でパフォーマンスが低下することがあります。 - ファイルの内容が上書きされる
-Append
を指定しない場合、指定したファイルの内容が上書きされるため注意が必要です。 - 変数に保存する場合のデータサイズ
パイプラインから変数に保存する際、大量のデータを扱うとメモリ使用量が増える可能性があります。
まとめ
Tee-Object
は、パイプライン処理を効率化し、データの確認やログの保存に役立つ便利なコマンドレットです。特に、デバッグやログ管理を行う際にその効果を発揮します。