PowerShellでファイル操作をする際、「ファイルに内容を書き込みたい」という場面は非常によくあります。そんな時に使える便利なコマンドが Set-Content
です。
この記事では、PowerShellにおける Set-Content
の基本的な使い方から、上書き・追記の違い、注意すべき落とし穴、さらには応用テクニックまで、初心者にもわかりやすく解説します。
「テキストファイルを生成してレポートを出力したい」
「スクリプト内でログを出力したい」
といったニーズに、すぐに役立つ内容です!
Set-Contentとは?概要と基本構文

Set-Content
は、指定したファイルに文字列を上書きするコマンドレットです。
基本構文は以下のとおりです。
Set-Content -Path "C:\Path\to\file.txt" -Value "こんにちは、世界!"
このコマンドを実行すると、file.txt
に「こんにちは、世界!」という文字列が書き込まれます。
ファイルが存在しない場合は、新規作成されます。
パラメータの説明
パラメータ | 説明 |
---|---|
-Path | 書き込み先のファイルパス |
-Value | 書き込む内容 |
-Encoding | 使用する文字エンコーディング |
-Force | 読み取り専用ファイルも上書き |
-NoNewline | 末尾の改行を省略 |
Set-Contentの使い方:よくあるパターン3選

単純な文字列を書き込む
Set-Content "sample.txt" "これはサンプルです"
カンタンにファイルを作成し、テキストを書き込めます。
パラメータ名を省略した簡易記法も使えます(1番目が-Path
、2番目が-Value
)。
複数行の内容を書き込む
$content = @(
"1行目のテキスト",
"2行目のテキスト",
"3行目のテキスト"
)
Set-Content "multi.txt" $content
このように配列を使うと、複数行のテキストを1行ずつ書き込むことができます。 各要素が自動的に改行されてファイルに書き込まれます。
変数を使って柔軟に出力する
$name = "山田"
$message = "こんにちは、$name さん!"
Set-Content "greeting.txt" $message
変数を組み合わせることで、動的な内容をファイルに出力することも可能です。
日付や計算結果、ユーザー入力などを組み合わせた高度な出力ができます。
Set-Contentの注意点:追記されない!

Set-Content
は常に「上書き」されます。
つまり、すでにファイルが存在している場合でも、内容はすべて消えて上書きされます。
これは意図しないデータ損失を招く可能性があるため、注意が必要です。
【回避策】追記したいときは Add-Content
Add-Content "sample.txt" "追記内容です"
上書きではなく、ファイルの末尾にテキストを追加したいときは Add-Content
を使いましょう。
この方法ならば、既存の内容を残したまま新しい内容を追加できます。
内容を確認してから上書き
重要なファイルを扱う場合、まず内容を確認してからの上書きがおすすめです:
# ファイルの内容を確認
Get-Content "important.txt"
# 確認後に上書き
Set-Content "important.txt" "新しい内容"
エンコーディングの指定:文字化けを防ぐ

Set-Content
はデフォルトで UTF-16 LE
で書き込まれます(PowerShellのバージョンによって異なる場合があります)。
これが原因で、他のソフトで開いたときに文字化けすることがあります。
対策として、-Encoding
パラメータを使います。
Set-Content -Path "utf8.txt" -Value "UTF-8で保存します" -Encoding UTF8
よく使うエンコーディングは以下の通りです:
エンコーディング | 説明 |
---|---|
UTF8 | 一般的なUTF-8形式 |
ASCII | 英数字のみの場合に最適 |
Unicode | UTF-16(デフォルト) |
Default | システムのデフォルト |
PowerShell 5.1と6.0以降の違い
PowerShellのバージョンによって、デフォルトのエンコーディングが異なります:
- PowerShell 5.1以前: UTF-16 LE
- PowerShell 6.0以降: UTF-8 (BOMなし)
バージョンをまたいで使用する場合は、明示的にエンコーディングを指定しておくことをおすすめします。
応用例:ログ出力や日時の記録に使う

日時付きログファイルの作成
$now = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Set-Content -Path "log.txt" -Value "スクリプト実行:$now"
このように、日時を自動で書き出すスクリプトも簡単に作成できます。
業務の自動化、ログの保存、タスクの履歴管理に非常に役立ちます。
既存ファイルのバックアップ
# 元ファイルの内容を取得
$content = Get-Content "config.ini"
# バックアップファイル名を日時付きで作成
$backupFile = "config_backup_$(Get-Date -Format 'yyyyMMdd_HHmmss').ini"
# バックアップファイルに書き込み
Set-Content -Path $backupFile -Value $content
JSONやXMLなどの設定ファイル生成
# JSON形式の設定ファイルを作成
$settings = @{
"UserName" = "admin"
"ServerPort" = 8080
"Debug" = $true
}
$json = $settings | ConvertTo-Json
Set-Content -Path "settings.json" -Value $json -Encoding UTF8
よくある問題と解決策

ファイルへのアクセスが拒否される
Set-Content : ファイル 'C:\config.txt' へのアクセスが拒否されました。
解決策:
- 管理者権限でPowerShellを実行する
-Force
パラメータを使用する- ファイルの権限を確認・変更する
パイプラインを使って出力をファイルに送りたい
コマンドの出力結果をそのままファイルに書き込みたい場合は:
Get-Process | Out-String | Set-Content "processes.txt"
ただし、この場合は Out-File
や >
リダイレクト演算子の方がシンプルな場合もあります:
Get-Process > "processes.txt"
大量のデータ処理時のパフォーマンス
大量のデータを処理する場合、Set-Content
はメモリ使用量に注意が必要です。代替手段として:
# ストリーミング処理でファイル書き込み
$stream = [System.IO.StreamWriter]::new("large_file.txt")
try {
for ($i = 1; $i -le 100000; $i++) {
$stream.WriteLine("Line $i of large file")
}
}
finally {
$stream.Close()
}
まとめ|Set-ContentでPowerShellのファイル操作をもっと自由に
PowerShellの Set-Content
を使えば、簡単にファイルにテキストを書き込むことができます。
- 基本的には「上書き」であることを理解する
- 追記したい場合は
Add-Content
を使う - エンコーディングを適切に指定する
この3点を押さえておけば、日常的なスクリプト作成やログ出力、設定ファイルの自動生成などに、幅広く応用できます。
他のファイル操作コマンドとの違い
コマンド | 主な用途 |
---|---|
Set-Content | ファイル内容の置き換え |
Add-Content | ファイルへの追記 |
Get-Content | ファイル内容の取得 |
Out-File | コマンド出力のファイル保存 |
New-Item | 新規ファイル/フォルダ作成 |
状況に応じて適切なコマンドを選択することで、より効率的なスクリプト作成が可能になります。
コメント