スポンサーリンク

【PowerShell】Tee-Objectとは?

記事内に広告が含まれています。

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は、パイプライン処理を効率化し、データの確認やログの保存に役立つ便利なコマンドレットです。特に、デバッグやログ管理を行う際にその効果を発揮します。

タイトルとURLをコピーしました