PowerShellを使っていると、「既存のテキストファイルに新しい内容を追加したい」ということがあります。
たとえば、
- 処理結果をログファイルに追加したい
- 日付や時刻を付けて実行履歴を残したい
- 既存のテキストを消さずに新しい行を追加したい
といった場合です。
PowerShellでファイルに追記する代表的な方法には、Add-ContentとOut-Fileの-Appendオプションがあります。
この記事では、PowerShell初心者向けに、ファイルへ文字列を追記する基本的な方法から、Add-ContentとOut-Fileの違い、日付入りログを作成する方法までサンプルコードを使って解説します。
PowerShellでファイルに追記する方法
PowerShellで既存のファイルに内容を追加する場合、簡単なのはAdd-Contentを使用する方法です。
たとえば、次のように記述します。
Add-Content -Path "C:\temp\test.txt" -Value "処理が完了しました"
実行すると、test.txt の末尾に、
処理が完了しました
という文字列が追加されます。
すでにファイルに内容が書かれていても、元の内容は削除されません。
ファイルの内容を残したまま、新しい文字を追加する というのが追記です。
Add-Contentでテキストファイルに追記する
Add-Contentの基本的な書き方は次のとおりです。
Add-Content -Path "ファイルのパス" -Value "追記する内容"
たとえば、次のファイルがあるとします。
C:\temp\sample.txt
ファイルの内容が、
1回目の処理
となっている状態で、次のPowerShellを実行します。
Add-Content -Path "C:\temp\sample.txt" -Value "2回目の処理"
実行後のファイルは、
1回目の処理 2回目の処理
となります。
このようにAdd-Contentを使えば、既存の内容を消さずにファイルの末尾へ文字列を追加できます。
変数の内容をファイルに追記する
Add-Contentでは、固定の文字列だけでなく変数に格納した値も追記できます。
$message = "バックアップが完了しました"
Add-Content -Path "C:\temp\log.txt" -Value $message
これを実行すると、log.txt に変数 $message の内容が追加されます。
スクリプトの処理結果を記録したい場合などに便利です。
日付と時刻を付けてログを追記する
実際のPowerShellスクリプトでは、単純に文字列を追加するだけでなく、「いつ処理されたのか」も記録しておくと便利です。
Get-Dateを組み合わせると、日付と時刻を付けて追記できます。
$date = Get-Date -Format "yyyy/MM/dd HH:mm:ss"
Add-Content -Path "C:\temp\log.txt" -Value "$date バックアップが完了しました"
実行すると、たとえば次のように記録されます。
2026/10/01 20:30:15 バックアップが完了しました
スクリプトを何度か実行すると、
2026/10/01 20:30:15 バックアップが完了しました 2026/10/02 20:30:12 バックアップが完了しました 2026/10/03 20:30:18 バックアップが完了しました
というように実行履歴を残せます。
バックアップ処理や定期実行するPowerShellスクリプトでは特に便利な方法です。
Out-File -Appendでファイルに追記する
PowerShellでは、Out-Fileを使ってファイルへ出力することもできます。
ただし、通常のOut-Fileでは既存ファイルの内容が置き換わる場合があります。
既存の内容を残して追記したい場合は、-Appendを指定します。
"処理が完了しました" | Out-File -FilePath "C:\temp\log.txt" -Append
-Appendを付けることで、既存ファイルの末尾に内容が追加されます。
文字コードを明示したい場合は、-Encodingも指定できます。
"処理が完了しました" |
Out-File -FilePath "C:\temp\log.txt" -Append -Encoding utf8
Out-Fileを使った基本的なファイル出力や日付入りログについては、 PowerShellでログを出力する方法|Out-File・追記・日付入りログを解説 でも詳しく解説しています。
コマンドの実行結果をOut-Fileで追記する
Out-Fileは、PowerShellコマンドの実行結果をファイルへ出力したい場合にも使えます。
たとえば、実行中のプロセス一覧をファイルへ追加する場合は次のようにします。
Get-Process |
Out-File -FilePath "C:\temp\process.txt" -Append
コンピューターのサービス一覧なら、
Get-Service |
Out-File -FilePath "C:\temp\service.txt" -Append
のように記述できます。
コマンドの表示結果をそのままファイルへ追加していきたい場合は、Out-Fileが分かりやすいでしょう。
Add-ContentとOut-File -Appendの違い
Add-ContentとOut-File -Appendは、どちらも既存ファイルに内容を追加できます。
ただし、使い方には少し違いがあります。
| 方法 | 向いている用途 |
|---|---|
| Add-Content | 文字列やログメッセージを追加したい |
| Out-File -Append | PowerShellの出力結果をファイルに追加したい |
たとえば、
Add-Content -Path "C:\temp\log.txt" -Value "処理完了"
のように単純なメッセージを追加する場合は、Add-Contentが分かりやすいです。
一方、
Get-Process |
Out-File -FilePath "C:\temp\process.txt"
のようにコマンドの表示結果を保存したい場合は、Out-Fileを使うと分かりやすく記述できます。
文字列を追記するならAdd-Content、コマンドの出力結果をファイルへ送るならOut-File、を一つの目安にするとよいでしょう。
複数のログを追記する
PowerShellスクリプトの途中でAdd-Contentを複数回使用すれば、処理の進行状況をログとして記録できます。
$logFile = "C:\temp\backup.log"
Add-Content -Path $logFile -Value "$(Get-Date -Format 'yyyy/MM/dd HH:mm:ss') 処理開始"
# バックアップなどの処理を記述
Add-Content -Path $logFile -Value "$(Get-Date -Format 'yyyy/MM/dd HH:mm:ss') 処理完了"
実行後のログは次のようになります。
2026/10/01 20:30:00 処理開始 2026/10/01 20:30:15 処理完了
この方法なら、処理がどこまで進んだのかを後から確認できます。
文字化けする場合は文字コードを確認する
日本語をファイルに出力するときは、使用しているPowerShellのバージョンや、ファイルを開くソフトによって文字コードの扱いに注意が必要な場合があります。
必要に応じて-Encodingを指定します。
Add-Content -Path "C:\temp\log.txt" -Value "処理完了" -Encoding utf8
Out-Fileの場合も同様です。
"処理完了" |
Out-File -FilePath "C:\temp\log.txt" -Append -Encoding utf8
既存ファイルへ追記するときは、もともとのファイルと追記時の文字コードが異ならないようにすることも大切です。
ファイルが存在しない場合はどうなる?
Add-Contentでは、指定したファイルが存在しない場合、新しいファイルを作成して内容を書き込むことができます。
たとえば、
Add-Content -Path "C:\temp\newlog.txt" -Value "ログ開始"
を実行したとき、newlog.txtが存在しなければファイルが作成されます。
そのため、
「ファイルがあるか確認して、なければNew-Itemで作成して……」
という処理を必ずしも事前に書く必要はありません。
ただし、指定したフォルダ自体が存在しない場合はエラーになるため、保存先フォルダが存在することは確認しておきましょう。
まとめ
PowerShellで既存のファイルへ内容を追記する場合は、Add-ContentまたはOut-Fileの-Appendオプションを利用できます。
単純な文字列やログメッセージを追加する場合はAdd-Contentが分かりやすく、PowerShellコマンドの出力結果をファイルに追加する場合はOut-File -Appendが便利です。
特にログを作成するときは、Get-Dateを組み合わせて日付と時刻を記録しておくと、後から処理状況を確認しやすくなります。
まずはAdd-Contentを使った簡単な追記から試してみてください。
