Tee-Object
コマンド出力をファイルまたは変数に保存し、パイプラインに送信します。
構文
File (既定)
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>]
説明
Tee-Object コマンドレットは、2 方向に出力を書き込みます。 出力はファイルまたは変数に格納され、パイプラインにも送信されます。
Tee-Objectがパイプラインの最後のコマンドである場合、コマンド出力がコンソールに表示されます。
内部的には、 Tee-Object は Set-Variable コマンドと Out-File コマンドを使用します。 これらのコマンドは 、WhatIf パラメーターをサポートします。
Tee-Object コマンドは WhatIf パラメーターをサポートしていません。 ただし、WhatIf パラメーターをサポートするスクリプトまたは関数でTee-Objectをラップした場合、Tee-Objectは WhatIf の状態を Set-Variable および Out-File コマンドに渡します。
例
例 1: 出力プロセスをファイルとコンソールに出力する
この例では、コンピューターで実行されているプロセスの一覧を取得し、結果をファイルに送信します。 2 番目のパスが指定されていないため、プロセスもコンソールに表示されます。
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
...
例 2: 変数と 'Select-Object' にプロセスを出力する
この例では、コンピューター上で実行されているプロセスの一覧を取得し、$proc 変数に保存し、それらをパイプして Select-Objectします。
Get-Process notepad | Tee-Object -Variable proc | Select-Object ProcessName, Handles
ProcessName Handles
----------- -------
notepad 43
notepad 37
notepad 38
notepad 38
Select-Object コマンドレットは、ProcessName プロパティと Handles プロパティを選択します。
$proc 変数には、Get-Processによって返される既定の情報が含まれていることに注意してください。
例 3: システム ファイルを 2 つのログ ファイルに出力する
次の使用例は、システム ファイルの一覧を、累積ファイルと現在のファイルの 2 つのログ ファイルに保存します。
Get-ChildItem -Path D: -File -System -Recurse |
Tee-Object -FilePath "C:\test\AllSystemFiles.txt" -Append |
Out-File C:\test\NewSystemFiles.txt
このコマンドでは、Get-ChildItem コマンドレットを使用して、D: ドライブ上のシステム ファイルを再帰的に検索します。 パイプライン演算子 (|) は、リストを Tee-Objectに送信します。これにより、リストが AllSystemFiles.txt ファイルに追加され、そのリストが Out-File コマンドレットに渡され、NewSystemFiles.txt fileにリストが保存されます。
例 4: 出力をコンソールに出力し、パイプラインで使用する
この例では、フォルダー内のファイルを取得し、コンソールに出力してから、フロント マター メタデータ ブロックが定義されているファイルをフィルター処理します。 最後に、フロントマターを持つ記事の名前を一覧表示します。
$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
この例では、$consoleDevice 変数を現在のターミナルのコンソール デバイスの値に設定します。 Windows では、出力を \\.\CON ファイルパスにリダイレクトすることで、現在のコンソール デバイスに書き込むことができます。 Windows 以外のシステムでは、/dev/tty ファイルパスを使用します。
次に、文字列が 3 つのダッシュ ($frontMatterPattern) で始まり、別の 3 つのダッシュの前にコンテンツがある場合に一致する正規表現に --- 変数を設定します。 このパターンがアーティクルのコンテンツと一致する場合、アーティクルには定義されたフロント マター メタデータ ブロックがあります。
次に、Get-ChildItem を使用して、About フォルダー内のすべてのファイルを取得します。
Tee-Object
FileName パラメーターを使用して、パイプされた結果をコンソールに出力します。
Where-Object、 の Get-Content パラメーターを使用してコンテンツを 1 つの文字列として取得し、その文字列を $frontMatterPatternと比較することで、ファイルをフィルター処理します。
最後に、フロント マター メタデータ ブロックが定義されているフォルダー内のファイルの名前を出力します。
例 5: **WhatIf** パラメーターを指定してスクリプトで 'Tee-Object' を使用する
Tee-Object コマンドは WhatIf パラメーターをサポートしていません。 ただし、WhatIf パラメーターをサポートするスクリプトまたは関数でTee-Objectをラップする場合、Tee-Objectは WhatIf の状態をSet-Variableに渡し、内部で使用するコマンドOut-Fileします。
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 ''
パラメーター
-Append
コマンドレットが指定したファイルに出力を追加することを示します。 このパラメーターを指定しない場合、新しいコンテンツは警告なしでファイル内の既存のコンテンツを置き換えます。
このパラメーターは、Windows PowerShell 3.0 で導入されました。
パラメーターのプロパティ
| 型: | SwitchParameter |
| 規定値: | False |
| ワイルドカードのサポート: | False |
| DontShow: | False |
パラメーター セット
File
| 配置: | Named |
| 必須: | False |
| パイプラインからの値: | False |
| プロパティ名別のパイプラインからの値: | False |
| 残りの引数からの値: | False |
-Encoding
ターゲット ファイルのエンコードの種類を指定します。 既定値は utf8NoBOM です。
このパラメーターに使用できる値は次のとおりです。
-
ascii: ASCII (7 ビット) 文字セットのエンコードを使用します。 -
ansi: 現在のカルチャの ANSI コード ページのエンコーディングを使用します。 このオプションは PowerShell 7.4 で追加されました。 -
bigendianunicode: ビッグ エンディアンバイト順を使用して UTF-16 形式でエンコードします。 -
oem: MS-DOS およびコンソール プログラムの既定のエンコードを使用します。 -
unicode: リトル エンディアンバイト順を使用して UTF-16 形式でエンコードします。 -
utf7: UTF-7 形式でエンコードします。 -
utf8: UTF-8 形式でエンコードします。 -
utf8BOM: バイト オーダー マーク (BOM) を使用して UTF-8 形式でエンコードします。 -
utf8NoBOM: バイト オーダー マーク (BOM) なしで UTF-8 形式でエンコードします -
utf32: UTF-32 形式でエンコードします。
PowerShell 6.2 以降では、Encoding パラメーターを使用すると、登録済みのコード ページ (-Encoding 1251など) の数値 ID や、登録されたコード ページの文字列名 (-Encoding "windows-1251"など) も使用できます。 詳細については、Encoding.CodePageの .NET ドキュメントを参照してください。
PowerShell 7.4 以降では、Ansi パラメーターの 値を使用して、手動で指定しなくても、現在のカルチャの ANSI コード ページの数値 ID を渡すことができます。
このパラメーターは、PowerShell 7.2 で導入されました。
注
UTF-7* を使用することは推奨されなくなりました。 PowerShell 7.1 の時点で、utf7 パラメーターに を指定すると警告が書き込まれます。
パラメーターのプロパティ
| 型: | Encoding |
| 規定値: | UTF8NoBOM |
| 指定可能な値: | ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
| ワイルドカードのサポート: | False |
| DontShow: | False |
パラメーター セット
(All)
| 配置: | 1 |
| 必須: | False |
| パイプラインからの値: | False |
| プロパティ名別のパイプラインからの値: | False |
| 残りの引数からの値: | False |
-FilePath
このコマンドレットでオブジェクトをワイルドカード文字に保存するファイルを指定しますが、1 つのファイルに解決する必要があります。
PowerShell 7 以降では、FilePath を Windows で \\.\CON として指定するか、Windows 以外のシステムで /dev/tty すると、InputObject がコンソールに出力されます。 これらのファイル パスは、システム上の現在のターミナルのコンソール デバイスに対応しているため、InputObject を出力し、1 つのコマンドで出力ストリームに送信できます。
パラメーターのプロパティ
| 型: | String |
| 規定値: | None |
| ワイルドカードのサポート: | True |
| DontShow: | False |
| Aliases: | 経路 |
パラメーター セット
File
| 配置: | 0 |
| 必須: | True |
| パイプラインからの値: | False |
| プロパティ名別のパイプラインからの値: | False |
| 残りの引数からの値: | False |
-InputObject
保存して表示するオブジェクトを指定します。 オブジェクトを含む変数を入力するか、オブジェクトを取得するコマンドまたは式を入力します。 オブジェクトを Tee-Object にパイプすることもできます。
InputObject パラメーターを Tee-Objectと共に使用すると、コマンドの結果を Tee-Objectにパイプするのではなく、値がコレクションであっても、InputObject 値は 1 つのオブジェクトとして扱われます。
パラメーターのプロパティ
| 型: | PSObject |
| 規定値: | None |
| ワイルドカードのサポート: | False |
| DontShow: | False |
パラメーター セット
(All)
| 配置: | Named |
| 必須: | False |
| パイプラインからの値: | True |
| プロパティ名別のパイプラインからの値: | False |
| 残りの引数からの値: | False |
-LiteralPath
このコマンドレットでオブジェクトを保存するファイルを指定します。 FilePathとは異なり、LiteralPath パラメーターの値は、型指定されたとおりに使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、エスケープ シーケンスとして文字を解釈しないように PowerShell に指示します。
パラメーターのプロパティ
| 型: | String |
| 規定値: | None |
| ワイルドカードのサポート: | False |
| DontShow: | False |
| Aliases: | PSPath, LP |
パラメーター セット
LiteralFile
| 配置: | Named |
| 必須: | True |
| パイプラインからの値: | False |
| プロパティ名別のパイプラインからの値: | False |
| 残りの引数からの値: | False |
-Variable
コマンドレットがオブジェクトを保存する変数を指定します。 前のドル記号 ($) なしで変数名を入力します。
パラメーターのプロパティ
| 型: | String |
| 規定値: | None |
| ワイルドカードのサポート: | False |
| DontShow: | False |
パラメーター セット
Variable
| 配置: | Named |
| 必須: | True |
| パイプラインからの値: | False |
| プロパティ名別のパイプラインからの値: | False |
| 残りの引数からの値: | False |
CommonParameters
このコマンドレットでは、一般的なパラメーター -Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction、-WarningVariable の各パラメーターがサポートされています。 詳細については、about_CommonParametersを参照してください。
入力
PSObject
このコマンドレットにオブジェクトをパイプできます。
出力
PSObject
このコマンドレットは、リダイレクトするオブジェクトを返します。
メモ
PowerShell には、Tee-Objectの次のエイリアスが含まれています。
- ウィンドウズ:
tee
また、Out-File コマンドレットまたはリダイレクト演算子を使用することもできます。どちらも出力をファイルに保存しますが、パイプラインには送信しません。
PowerShell 6 以降では、Tee-Object はファイルに書き込むときに BOM レス UTF-8 エンコードを使用します。 別のエンコードが必要な場合は、Out-File コマンドレットと Encoding パラメーターを使用します。