メモ:PowerShell の文字化け問題

PowerShellとは?

  • Windows独自の 珍妙な 強力なシェル
  • たしかにDOS窓と比べてはるかに強力だがよく分からない。
  • シェルスクリプトの拡張子は .ps1 (でもメモ帳に関連付けられる…)
  • そしてやたら文字化けする。

シェルスクリプトの実行権限

  • 下記コマンドで確認できる。
Get-ExecutionPolicy
  • デフォルトでは Restricted で、スクリプトの実行は不可
  • ローカルのスクリプトか署名のあるスクリプトの実行を許可するには下記のコマンド。(実行には管理者権限が必要)
Set-ExecutionPolicy RemoteSigned
Set-ExecutionPolicy Restricted

文字コードの確認と変更

  • 現在の文字コードは下記のコマンドで確認。(デフォルトは US-ASCII )
$OutputEncoding.EncodingName
$OutputEncoding = [Text.UTF8Encoding]::UTF8  # UTF-8
$OutputEncoding = [Console]::OutputEncoding  # Shift-JIS
$OutputEncoding = New-Object System.Text.ASCIIEncoding  # US-ASCII
$OutputEncoding = [System.Text.Encoding]::GetEncoding('utf-8')      # UTF-8
$OutputEncoding = [System.Text.Encoding]::GetEncoding('shift_jis')  # Shift-JIS
$OutputEncoding = [System.Text.Encoding]::GetEncoding('ascii')      # US-ASCII
  • 日本語文字列をパイプで渡すとき、文字コードがデフォルトの US-ASCII のままだと文字化けが起きる。

Export-CSV の文字化け対策

  • Export-CSVcsvファイルを出力する場合は、オプション指定で文字コードを指定しないと日本語文字がすべて「?」になる。例えば下記のような場合。
Get-EventLog system -Newest 10 | Export-CSV log.csv
Get-EventLog system -Newest 10 | Export-CSV log.csv -Encoding Default  # Shift-JIS
Get-EventLog system -Newest 10 | Export-CSV log.csv -Encoding UTF8     # UTF-8