1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

PowerShellでログ出力するときはOut-Fileでエンコーディングを指定しよう

背景

バッチからPowerShellスクリプトを実行するときに、同じログファイルにリダイレクトしたら著しく文字化けしたのを何とかしようと思って。

バッチでのログファイルリダイレクトに慣れていると、うっかりやりがちだと思います。

どういう状況?

たとえばこんな感じです。

hoge.bat
set LOGPATH=C:\temp\hoge.log
IF NOT EXIST %LOGPATH% (
 TYPE NUL > %LOGPATH%
)

echo バッチ処理 > %LOGPATH%
@REM -PowerShellスクリプトを呼ぶバッチ
powershell -ExecutionPolicy RemoteSigned -File .\sample.ps1 %LOGPATH%
sample.ps1
Param(
  [String]$logFilePath
)
echo $logFilePath
Write-Output "Powershellでの書き込み" >> $logFilePath

出力されたログをメモ帳で開くと、こんな感じで見えます。
絶妙に気持ち悪い。
無題.png

Out-Fileでエンコーディング指定すると良い

こう書けば同じログファイルに追記しても文字化けしないです。

sample.ps1
Write-Output('Powershellでの書き込み') | Out-File -Encoding default -Append $logFilePath

こう見えます。
無題.png

-Appendは追記オプションです。これがないと、上書きされてしまいます。
無題.png

Write-Outputの文字コードデフォルトを確認してみる

単純にリダイレクトだけしてファイル作成してみると、UTF-16で書き込まれるようです。
無題.png

一連の処理をバッチで実行したい場合、ログファイルを共通化するときは文字コードに注意が必要ですね。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?