メモ帳で作成したスクリプトファイル(.ps1)をPowerShellから実行すると、文字化けエラーになります。
これは、PowerShellとメモ帳で作成したファイルの文字コードが合っていないからです。
メモ帳でスクリプトファイルを作成すると、デフォルトでは文字コード[UTF-8](BOM無し)で保存されます。
そのため、保存時に[UTF-8(BOM付き)]を選択することで、文字化けエラーは解消します。
なぜBOM無しだと文字化けになるのか?
メモ帳で作成したスクリプトファイル([UTF-8](BOM無し))をPowerShellで実行すると、なぜ文字化けになるのか?
今回とても参考になった、PowerShellの文字コードとBOMについての記事です↓
PowerShellの文字コードについて解説!文字化けで困らないための対処法 | テックマガジン from FEnetインフラ
上記の記事から、脳みそがシンプルな私が要約し、文字コードの歴史と今回の文字化け問題と繋げたのが以下。間違っていたらすみません。
① 昔の文字コードUS-ASCII
→英語圏のみのため、あちらこちらで文字化け発生
② 全世界対応のUnicode誕生
→全世界の文字に番号つけただけ
③ Unicodeベースの文字コードUTF-8(BOM付き)誕生
→BOM(数バイトの符号)でUnicodeと判断する
④ UTF-8(BOM無し)が主流になる
→メモ帳での保存はデフォルトがBOM無しとなる
→PowerShellはUnicodeなのでBOM無しだと文字化け発生
こんな感じでなんとなく理解しました。
文字化けを解消する手順
まずは文字化けするパターンです。
メモ帳でスクリプトファイルを作成し、そのまま保存します。
PowerShellから実行すると、日本語が文字化けします。メモ帳ではデフォルトで[UTF-8](BOM無し)で保存されるからです。
次に、メモ帳でスクリプトファイルを、文字コード[UTF-8(BOM付き)]で保存します。
PowerShellから実行すると、文字化けすることなく実行できました。
まとめ
今回はPowerShellの勉強中にハマったことを備忘録として書きました。誰かのお役に立てればうれしいです。
PowerShellのこんな記事も人気ですので良ければ見てみてください↓
PowerShellの実行ポリシーとは?ポリシーを変更する方法

PowerShellのコマンド一覧とコマンドレットの詳細確認方法
