Out-Fileの使い方:コマンドの実行結果をファイルに保存する
Out-File コマンドレットを使用すると、コマンドの実行結果をファイルに保存することができます。 Set-Content コマンドレットと似ていますが、 Out-File の場合はコマンドの実行結果を表示用に整形した形式でファイルに保存することができます。ここでは PowerShell における Out-File コマンドレットの使い方について解説します。
Out-Fileコマンドレットの書式
Out-File コマンドレットは、コマンドの実行結果をファイルに保存するためのコマンドレットです。 Out-File コマンドレットの書式は次の通りです。
Out-File [-FilePath] <string> [[-Encoding] <Encoding>] [-Append] [-Force] [-NoClobber] [-Width <int>] [-NoNewline] [-InputObject <psobject>] [-WhatIf] [-Confirm] [<CommonParameters>]
Out-File を使ってコマンドの実行結果をファイルに保存するには次の書式を使用します。
コマンド | Out-File -FilePath ファイルのパス
Out-File ではコマンドの実行結果をパイプを経由して Out-File へ入力するのが一般的な使い方です。
-FilePath は省略可能なので、通常は次のように実行します。
コマンド | Out-File ファイルのパス
Out-File でファイルのパスに既存のファイルを指定した場合、既存のファイルの内容を空にした上で内容を書き込みます。もともとファイルに入っていた内容はすべて失われ、元に戻すことはできないため注意が必要です。ファイルのパスに存在しないファイルを指定した場合は、新しいファイルを作成した上で内容を書き込みます。(-Append オプションを使用すると追記することもできます。のちほど解説します)。
それでは、実際に試してみます。例として Get-Process コマンドの実行結果をファイルに保存します。まず実行結果がどのように画面に表示されるのかを確認します。次のように実行してください。
Get-Process
実行結果が画面に表示されます。
Out-File を使ってファイルに保存します。次のように実行してください。
Get-Process | Out-File c:\tmp\file\process.txt
画面上には何も表示されません。今回は存在しないファイルを指定したので、新規ファイルの作成、および書き込みが行われています。
それでは c:\tmp\file\process.txt ファイルをテキストエディタで開いてみます。
Get-Process コマンドの実行結果が、画面表示に使用されるフォーマットに基づいてファイルに保存されています。
なお Out-File と似ている Set-Content の場合は、実行結果を既定の文字列形式で整形したものをファイルに保存します。
次のように実行してください。
Get-Process | Set-Content c:\tmp\file\process.txt
実行後に c:\tmp\file\process.txt ファイルをテキストエディタで開くと次のように表示されます。
Set-Content の場合は、オブジェクトを文字列に変換(各オブジェクトの ToString メソッドの実行結果)した内容がファイルに保存されます。
ファイルに追記する
Out-File を使って既存のファイルに書き込む場合、内容は上書きされます。そのため、既存の内容はすべて削除されますが、-Append オプションを使用すると、上書きではなくファイルに追記することができます。
コマンド | Out-File ファイルのパス -Append
それでは実際に試してみます。 c:\tmp\file\directory.txt ファイルにあらかじめ次のようなテキストが入力されています。
PS C:\code\powershell> Get-Content c:\tmp\file\directory.txt 現在のディレクトリの情報を記録します。
同じファイルに Get-ChildItem c:\tmp\file の実行結果を Out-File を使って追記してみます。次のように実行してください。
Get-ChildItem c:\tmp\file | Out-File c:\tmp\file\directory.txt -Append
画面上には何も表示されません(正常にファイルの書き込みが行われています)。
あらためて c:\tmp\file\directory.txt ファイルの内容を確認してみます。
PS C:\code\powershell> Get-Content c:\tmp\file\directory.txt
現在のディレクトリの情報を記録します。
Directory: C:\tmp\file
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2026/04/19 22:09 16 address.txt
-a--- 2026/04/20 14:55 59 directory.txt
-a--- 2026/04/20 7:53 32 memo.txt
Out-File の結果が上書きではなく、既存の内容に続けて追記されていることが確認できました。
1行の最大文字数を設定する
コマンドの実行結果は、コンソールの幅に応じて表示されるため、列の幅が足りない場合には情報が省略されたり、一部が切り詰められて表示されます。例えば Get-Process の実行結果を見てみます。
コンソールの幅に収まっている場合は、そのまま表示されています。
PS C:\code\powershell> Get-Process
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
23 34.23 0.45 0.33 17236 1 AcrobatNotificationClient
104 147.93 45.86 486.72 1672 1 Adobe Desktop Service
24 8.16 3.54 157.50 44504 1 AdobeIPCBroker
スクロールしていくと、次のように右端の部分が … と表示されている部分があります。これはコンソールの幅に収まりきらなかったので、一部情報が省略されている状態です。
8 1.45 0.20 0.00 2124 0 IntelCpHDCPSvc
40 11.25 6.72 0.00 6960 0 IntelGraphicsSoftware.Se…
38 21.23 9.09 4.19 68236 1 intel_cst_helper_service
59 41.59 17.98 0.00 4376 0 intel_cst_service_standa…
13 2.64 0.21 0.00 4412 0 ipfsvc
それでは Get-Process の実行結果を Out-File を使ってファイルに書き出します。
Get-Process | Out-File c:\tmp\file\process.txt
ファイルの内容を確認してみると、画面で一部省略されていた行は、ファイルでも同じように一部省略されて書き込まれていました。
このように Out-File によってファイルにどのようにコマンドの実行結果が書き込まれるのかは、コンソールの幅や出力のフォーマット設定に影響を受けますが、 -Width オプションを使用することで 1 行に表示できる最大文字数を設定することができます。
コマンド | Out-File ファイルのパス -Width 最大文字数
ファイルに書き出すときに、折り返されたり、情報が省略されないようにするには、最大文字数には十分に大きな値を指定しておいてください。
それでは次のように実行します。
Get-Process | Out-File c:\tmp\file\process.txt -Width 1000
ファイルの内容を確認してみると、先ほど一部省略されていた行が、省略されずにすべてファイルに保存されていることが確認できました。
なお -Width オプションに設定する値はあくまで最大文字数の指定であり、必ずその幅で表示されるわけではありません。そのため、大きめの値を指定しても問題はありません。
ファイルの文字コードを指定する
Out-File では、ファイルにデータを書き込む際は、既定の文字コードが使用されます。 PowerShell 7 では既定の文字コードは UTF-8(BOMなし) です。
UTF-8(BOMなし) 以外の文字コードでファイルを保存するには -Encoding オプションを使用します。
コマンド | Out-File ファイルのパス -Encoding 文字コード
文字コードとして指定できる値は次の通りです。デフォルトの値は utf8NoBOM です。
ascii ansi bigendianunicode bigendianutf32 oem unicode utf7 utf8 utf8BOM utf8NoBOM utf32
※ utf7 は非推奨です。
また登録済みのコードページの数値を指定したり(-Encoding 932 など)、登録されたコードページの文字列名(-Encoding Shift_JIS など) も使用できます。
ansi を指定した場合は、現在の Windows のシステムロケールに対応した ANSI コードページが使用されます。日本語環境では通常、コードページ 932(Shift_JIS)が使用されます。そのため、 Shift_JIS でファイルを保存する場合は -Encoding オプションの値として ansi を指定するか、コードページの数値である 932 を指定してください。
Out-File で -Append オプションを使用する場合、既存の内容に追記となるため文字コードを設定する場合は注意が必要です。例えば対象のファイルが元々 UTF-8 で保存されている場合に、 Shift_JIS を指定してデータを追記すると、元々ファイルにあったデータか、追記したデータのどちらかが文字化けします。これは、ファイル内で異なる文字コードのデータが混在してしまうためです。
-Append オプションを使用していない場合はファイル全体を新しく書き直すため、このような文字コードの混在による問題は発生しません。
それでは実際に試してみます。文字コードとして Shift_JIS を指定してファイルに書き込みをしてみます。
Get-ChildItem c:\tmp\file | Out-File c:\tmp\file\dir.txt -Encoding 932
画面上には何も表示されません(正常にファイルの書き込みが行われています)。
書き込んだファイルをテキストエディタで開いてみると、ファイルが Shift_JIS で保存されていることが確認できます。
リダイレクトとの違い
コマンドの実行結果をファイルに保存する方法としてリダイレクトが用意されています。
> 上書きでファイルに保存 >> 追記でファイルに保存
リダイレクト(>)は Out-File と同等であり、次のように記述することができます。
コマンド > ファイルのパス
リダイレクト(>>)は Out-File -Append と同等であり、次のように記述することができます。
コマンド >> ファイルのパス
※ リダイレクト(> / >>)は、Out-File と同様にコマンドの実行結果をファイルに書き込むための機能であり、基本的な動作はほぼ同じです。
それでは実際に試してみます。次のように実行してください。
Get-Process > c:\tmp\file\process.txt
画面上には何も表示されません(正常にファイルの書き込みが行われています)。
書き込んだファイルを開いてみます。
Out-File を使用した場合と同じ内容がファイルに書き込まれています。
リダイレクトは簡潔に記述できるメリットがありますが、 Out-File のように -Width オプションや、 -Encoding オプションなどは使用できないため、細かい調整はできません。
簡単にファイルへ出力したい場合はリダイレクトを、文字コードや出力形式などを細かく制御したい場合は Out-File を使用するとよいでしょう。
-- --
PowerShell における Out-File コマンドレットの使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。