次の方法で共有


Out-File

ファイルに出力を送信します。

構文

ByPath (既定)

Out-File
    [-FilePath] <string>
    [[-Encoding] <Encoding>]
    [-Append]
    [-Force]
    [-NoClobber]
    [-Width <int>]
    [-NoNewline]
    [-InputObject <psobject>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

ByLiteralPath

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: プロバイダーを使用して出力をファイルに送信する

この例では、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.txtGet-Content コマンドレットは、Path パラメーターを使用し、PowerShell コンソールにファイルの内容を表示します。

例 5: スコープ全体のファイル出力幅を設定する

この例では、$PSDefaultParameterValues を使用して、Width およびリダイレクト演算子 (Out-File および >) のすべての呼び出しの >> パラメーターを 2000 に設定します。 これにより、テーブル形式のデータをファイルに出力する現在のスコープ内のすべての場所で、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
規定値:None
ワイルドカードのサポート:False
DontShow:False

パラメーター セット

(All)
配置:Named
必須:False
パイプラインからの値:False
プロパティ名別のパイプラインからの値:False
残りの引数からの値:False

-Confirm

コマンドレットを実行する前に確認を求めるメッセージが表示されます。

パラメーターのプロパティ

型:SwitchParameter
規定値:False
ワイルドカードのサポート:False
DontShow:False
Aliases:cf

パラメーター セット

(All)
配置: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 パラメーターを使用すると、登録済みのコード ページ (-Encoding 1251など) の数値 ID や、登録されたコード ページの文字列名 (-Encoding "windows-1251"など) も使用できます。 詳細については、Encoding.CodePageの .NET ドキュメントを参照してください。

PowerShell 7.4 以降では、Ansi パラメーターの 値を使用して、手動で指定しなくても、現在のカルチャの ANSI コード ページの数値 ID を渡すことができます。

UTF-7* を使用することは推奨されなくなりました。 PowerShell 7.1 の時点で、utf7 パラメーターに を指定すると警告が書き込まれます。

パラメーターのプロパティ

型:Encoding
規定値:UTF8NoBOM
指定可能な値:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
ワイルドカードのサポート:False
DontShow:False

パラメーター セット

(All)
配置:1
必須:False
パイプラインからの値:False
プロパティ名別のパイプラインからの値:False
残りの引数からの値:False

-FilePath

出力ファイルへのパスを指定します。

パラメーターのプロパティ

型:String
規定値:None
ワイルドカードのサポート:False
DontShow:False
Aliases:経路

パラメーター セット

ByPath
配置:0
必須:True
パイプラインからの値:False
プロパティ名別のパイプラインからの値:False
残りの引数からの値:False

-Force

読み取り専用属性をオーバーライドし、既存の読み取り専用ファイルを上書きします。 Force パラメーターは、セキュリティ制限をオーバーライドしません。

パラメーターのプロパティ

型:SwitchParameter
規定値:None
ワイルドカードのサポート:False
DontShow:False

パラメーター セット

(All)
配置:Named
必須:False
パイプラインからの値:False
プロパティ名別のパイプラインからの値:False
残りの引数からの値:False

-InputObject

ファイルに書き込むオブジェクトを指定します。 オブジェクトを含む変数を入力するか、オブジェクトを取得するコマンドまたは式を入力します。

パラメーターのプロパティ

型:PSObject
規定値:None
ワイルドカードのサポート:False
DontShow:False

パラメーター セット

(All)
配置:Named
必須:False
パイプラインからの値:True
プロパティ名別のパイプラインからの値:False
残りの引数からの値:False

-LiteralPath

出力ファイルへのパスを指定します。 LiteralPath パラメーターは、型指定されたとおりに使用されます。 ワイルドカード文字は使用できません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、エスケープ シーケンスとして文字を解釈しないように PowerShell に指示します。 詳細については、about_Quoting_Rulesを参照してください。

パラメーターのプロパティ

型:String
規定値:None
ワイルドカードのサポート:False
DontShow:False
Aliases:PSPath, LP

パラメーター セット

ByLiteralPath
配置:Named
必須:True
パイプラインからの値:False
プロパティ名別のパイプラインからの値:True
残りの引数からの値:False

-NoClobber

NoClobber は、既存のファイルが上書きされないようにし、ファイルが既に存在することを示すメッセージを表示します。 既定では、指定したパスにファイルが存在する場合、Out-File は警告なしでファイルを上書きします。

パラメーターのプロパティ

型:SwitchParameter
規定値:None
ワイルドカードのサポート:False
DontShow:False
Aliases:NoOverwrite

パラメーター セット

(All)
配置:Named
必須:False
パイプラインからの値:False
プロパティ名別のパイプラインからの値:False
残りの引数からの値:False

-NoNewline

ファイルに書き込まれたコンテンツが改行文字で終わらないことを指定します。 入力オブジェクトの文字列形式が連結されて出力が形成されます。 出力文字列の間にスペースや改行は挿入されません。 最後の出力文字列の後に改行は追加されません。

パラメーターのプロパティ

型:SwitchParameter
規定値:None
ワイルドカードのサポート:False
DontShow:False

パラメーター セット

(All)
配置:Named
必須:False
パイプラインからの値:False
プロパティ名別のパイプラインからの値:False
残りの引数からの値:False

-WhatIf

コマンドレットを実行した場合の動作を示します。 コマンドレットは実行されません。

パラメーターのプロパティ

型:SwitchParameter
規定値:False
ワイルドカードのサポート:False
DontShow:False
Aliases:ウィスコンシン

パラメーター セット

(All)
配置:Named
必須:False
パイプラインからの値:False
プロパティ名別のパイプラインからの値:False
残りの引数からの値:False

-Width

出力の各行の最大文字数を指定します。 追加の文字は、ラップされずに切り捨てられます。 このパラメーターを使用しない場合、幅はホストの特性によって決まります。 PowerShell コンソールの既定値は 80 文字です。 Out-File のすべての呼び出しとリダイレクト演算子 (> および >>) の幅を制御する場合は、$PSDefaultParameterValues['Out-File:Width'] = 2000を使用する前に Out-File 設定します。

パラメーターのプロパティ

型:Int32
規定値:None
ワイルドカードのサポート:False
DontShow:False

パラメーター セット

(All)
配置:Named
必須:False
パイプラインからの値:False
プロパティ名別のパイプラインからの値:False
残りの引数からの値:False

CommonParameters

このコマンドレットでは、一般的なパラメーター -Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction、-WarningVariable の各パラメーターがサポートされています。 詳細については、about_CommonParametersを参照してください。

入力

PSObject

任意のオブジェクトをこのコマンドレットにパイプできます。

出力

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を参照してください。