Out-File
ファイルに出力を送信します。
構文
Out-File
[-FilePath] <string>
[[-Encoding] <Encoding>]
[-Append]
[-Force]
[-NoClobber]
[-Width <int>]
[-NoNewline]
[-InputObject <psobject>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Out-File
[[-Encoding] <Encoding>]
-LiteralPath <string>
[-Append]
[-Force]
[-NoClobber]
[-Width <int>]
[-NoNewline]
[-InputObject <psobject>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
説明
コマンドレットは Out-File
出力をファイルに送信します。 PowerShell の書式設定システムを暗黙的に使用してファイルに書き込みます。 ファイルはターミナルと同じ表示表現を受け取ります。 つまり、すべての入力オブジェクトが文字列でない限り、出力はプログラムによる処理に適していない可能性があります。
リダイレクト演算子 (>
) を使用した PowerShell コマンド (コマンドレット、関数、スクリプト) の出力のリダイレクトは、追加のパラメーターを使用しない Out-File
へのパイプ処理と機能的に同等です。
PowerShell 7.4 では、ネイティブ コマンドの stdout ストリームをリダイレクトするために使用した場合のリダイレクト演算子の動作が変更されました。 リダイレクトの詳細については、「about_Redirection」を参照してください。
例
例 1: 出力を送信してファイルを作成する
この例では、ローカル コンピューターのプロセスの一覧をファイルに送信する方法を示します。 ファイルが存在しない場合は、 Out-File
指定したパスにファイルを作成します。
Get-Process | Out-File -FilePath .\Process.txt
Get-Content -Path .\Process.txt
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
29 22.39 35.40 10.98 42764 9 Application
53 99.04 113.96 0.00 32664 0 CcmExec
27 96.62 112.43 113.00 17720 9 Code
このコマンドレットは Get-Process
、ローカル コンピューターで実行されているプロセスの一覧を取得します。 Process オブジェクトは、パイプラインからコマンドレットにOut-File
送信されます。 Out-File
は FilePath パラメーターを使用し、Process.txtという名前の現在のディレクトリにファイルを作成します。 このコマンドは Get-Content
、ファイルからコンテンツを取得し、PowerShell コンソールに表示します。
例 2: 既存のファイルが上書きされないようにする
この例では、既存のファイルが上書きされないようにします。 既定では、 Out-File
既存のファイルが上書きされます。
Get-Process | Out-File -FilePath .\Process.txt -NoClobber
Out-File : The file 'C:\Test\Process.txt' already exists.
At line:1 char:15
+ Get-Process | Out-File -FilePath .\Process.txt -NoClobber
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
このコマンドレットは Get-Process
、ローカル コンピューターで実行されているプロセスの一覧を取得します。 Process オブジェクトは、パイプラインからコマンドレットにOut-File
送信されます。 Out-File
は FilePath パラメーターを使用し、Process.txtという名前の現在のディレクトリ内のファイルへの書き込みを試みます。 NoClobber パラメーターは、ファイルが上書きされないようにし、ファイルが既に存在することを示すメッセージを表示します。
例 3: ASCII 形式でファイルに出力を送信する
この例では、特定のエンコードの種類で出力をエンコードする方法を示します。
$Procs = Get-Process
Out-File -FilePath .\Process.txt -InputObject $Procs -Encoding ASCII -Width 50
このコマンドレットは Get-Process
、ローカル コンピューターで実行されているプロセスの一覧を取得します。 Process オブジェクトは変数$Procs
に格納されます。 Out-File
は FilePath パラメーターを使用し、Process.txtという名前の現在のディレクトリにファイルを作成します。 InputObject パラメーターは、プロセス オブジェクト$Procs
をファイル Process.txtに渡します。 Encoding パラメーターは、出力を ASCII 形式に変換します。 Width パラメーターは、ファイル内の各行を 50 文字に制限するため、一部のデータが切り捨てられる可能性があります。
例 4: プロバイダーを使用して出力をファイルに送信する
この例では、FileSystem プロバイダー ドライブにいない場合にコマンドレットを使用Out-File
する方法を示します。 コマンドレットを Get-PSProvider
使用して、ローカル コンピューター上のプロバイダーを表示します。 詳細については、「about_Providers」を参照してください。
PS> Set-Location -Path Alias:
PS> Get-Location
Path
----
Alias:\
PS> Get-ChildItem | Out-File -FilePath C:\TestDir\AliasNames.txt
PS> Get-Content -Path C:\TestDir\AliasNames.txt
CommandType Name
----------- ----
Alias % -> ForEach-Object
Alias ? -> Where-Object
Alias ac -> Add-Content
Alias cat -> Get-Content
このコマンドではSet-Location
、Path パラメーターを使用して、現在の場所をレジストリ プロバイダーに設定しますAlias:
。 コマンドレットには Get-Location
、次の完全なパス Alias:
が表示されます。
Get-ChildItem
は、パイプラインの下にオブジェクトをコマンドレットに Out-File
送信します。 Out-File
は FilePath パラメーターを使用して、出力の完全なパスとファイル名 C:\TestDir\AliasNames.txt を指定します。 コマンドレットは Get-Content
Path パラメーターを使用し、PowerShell コンソールにファイルの内容を表示します。
例 5: スコープ全体のファイル出力幅を設定する
この例では、$PSDefaultParameterValues
リダイレクト演算子 (>
および>>
) のすべての呼び出しのOut-File
パラメーターを 2000 に設定Width
します。 これにより、テーブル形式のデータをファイルに出力する現在のスコープ内のすべての場所で、PowerShell ホストのコンソールの幅によって決まる行幅ではなく、2000 の行幅が使用されます。
function DemoDefaultOutFileWidth() {
try {
$PSDefaultParameterValues['out-file:width'] = 2000
$logFile = "$pwd\logfile.txt"
Get-ChildItem Env:\ > $logFile
Get-Service -ErrorAction Ignore |
Format-Table -AutoSize |
Out-File $logFile -Append
Get-Process | Format-Table Id,SI,Name,Path,MainWindowTitle >> $logFile
}
finally {
$PSDefaultParameterValues.Remove('out-file:width')
}
}
DemoDefaultOutFileWidth
$PSDefaultParameterValues
の詳細については、「about_Preference_Variables」を参照してください。
パラメーター
-Append
既存のファイルの末尾に出力を追加します。
型: | SwitchParameter |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Confirm
コマンドレットの実行前に確認を求めるメッセージが表示されます。
型: | SwitchParameter |
Aliases: | cf |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Encoding
ターゲット ファイルのエンコードの種類を指定します。 既定値は utf8NoBOM
です。
このパラメーターに使用できる値は次のとおりです。
ascii
: ASCII (7 ビット) 文字セットのエンコードを使用します。ansi
: 現在のカルチャの ANSI コード ページのエンコードを使用します。 このオプションは PowerShell 7.4 で追加されました。bigendianunicode
: ビッグ エンディアンバイト順を使用して UTF-16 形式でエンコードします。bigendianutf32
: ビッグ エンディアンバイト順を使用して UTF-32 形式でエンコードします。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 パラメーターを使用すると、登録済みコード ページの数値 ID (いいね) -Encoding 1251
や登録済みコード ページの文字列名 (例-Encoding "windows-1251"
) も使用できます。 詳細については、Encoding.CodePage の .NET ドキュメントを 参照してください。
PowerShell 7.4 以降では、Encoding パラメーターの値をAnsi
使用して、手動で指定しなくても、現在のカルチャの ANSI コード ページの数値 ID を渡すことができます。
Note
UTF-7* の使用は推奨されなくなりました。 PowerShell 7.1 の時点で、Encoding パラメーターに指定utf7
すると警告が書き込まれます。
型: | Encoding |
指定可能な値: | ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
配置: | 1 |
規定値: | UTF8NoBOM |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-FilePath
出力ファイルのパスを指定します。
型: | String |
Aliases: | Path |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Force
読み取り専用属性をオーバーライドし、既存の読み取り専用ファイルを上書きします。 Force パラメーターは、セキュリティ制限をオーバーライドしません。
型: | SwitchParameter |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-InputObject
ファイルに書き込むオブジェクトを指定します。 オブジェクトが格納されている変数を入力するか、オブジェクトを取得するコマンドまたは式を入力します。
型: | PSObject |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-LiteralPath
出力ファイルのパスを指定します。 LiteralPath パラメーターは、型指定されたとおりに使用されます。 ワイルドカード文字は使用できません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、エスケープ シーケンスとして文字を解釈しないように PowerShell に指示します。 詳細については、「about_Quoting_Rules」を参照してください。
型: | String |
Aliases: | PSPath, LP |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-NoClobber
NoClobber は、既存のファイルが上書きされないようにし、ファイルが既に存在することを示すメッセージを表示します。 既定では、指定したパスにファイルが存在する場合は、 Out-File
警告なしでファイルを上書きします。
型: | SwitchParameter |
Aliases: | NoOverwrite |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-NoNewline
ファイルに書き込まれたコンテンツが改行文字で終わらないことを指定します。 入力オブジェクトの文字列形式が連結されて出力が形成されます。 出力文字列の間にスペースや改行は挿入されません。 最後の出力文字列の後に改行は追加されません。
型: | SwitchParameter |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-WhatIf
コマンドレットの実行時に発生する内容を示します。 コマンドレットは実行されません。
型: | SwitchParameter |
Aliases: | wi |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Width
出力の各行の最大文字数を指定します。 これを超過する文字は、折り返されることなく切り捨てられます。 このパラメーターを使用しない場合、幅はホストの特性によって決まります。 PowerShell コンソールの既定値は 80 文字です。 使用する前Out-File
に設定$PSDefaultParameterValues['out-file:width'] = 2000
されたリダイレクト演算子 (>
および) だけでなく、すべての呼び出し>>
のOut-File
幅を制御する場合。
型: | Int32 |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
入力
任意のオブジェクトをこのコマンドレットにパイプできます。
出力
None
このコマンドレットは、出力を返しません。
メモ
入力オブジェクトはターミナルと同じように自動的に書式設定されますが、コマンドレットを Format-*
使用して、ファイルへの出力の書式設定を明示的に制御できます。 たとえば、Get-Date | Format-List | Out-File out.txt
のように指定します。
PowerShell コマンドの出力をコマンドレットに Out-File
送信するには、パイプラインを使用します。 または、変数にデータを格納し、InputObject パラメーターを使用してコマンドレットにデータをOut-File
渡すこともできます。
Out-File
はデータをファイルに保存しますが、パイプラインに出力オブジェクトを生成しません。
PowerShell 7.2 では、ANSI エスケープ シーケンスのレンダリング方法を制御する機能が追加されました。 渡 Out-File
される ANSI 装飾出力は、プロパティの $PSStyle.OutputRendering
設定に基づいて変更できます。 詳細については、「about_ANSI_Terminals」を参照してください。
関連リンク
PowerShell