3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PowerShellAdvent Calendar 2020

Day 5

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

Last updated at Posted at 2020-12-04

背景

バッチから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

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

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?