【PowerShell】"日本語を含むスクリプトで「終端記号がありません」というエラーが出る"

テキストエディタでスクリプトを作成し、PowerShellやPowershell ISEで実行すると
「文字列に終端記号がありません」というエラーが出る原因と対処法を紹介します。

実行環境

  • PowerShell: 5.1.19041.1682
  • テキストエディタ: VS Code

エラーの原因「文字コード」

私の環境ではVS Codeで作成したファイルはUTF-8で保存されるよう設定されていました。

一方でPowerShellはデフォルトだとShift-JISで解釈するらしく、
文字コードの不一致が発生し当該エラーである「終端記号がありません」が発生していたようです。

Microsoft「VS Code と PowerShell でのファイルのエンコードの概要」2022年8月11日取得

対処法「エンコードを変えるか日本語を使わない」

私のコードでは入力待ちの際に表示する文言を日本語で入力していました。


$target_dir = Read-Host "対象のディレクトリを入力"

このスクリプトは私1人が使用するものなので、英語でも問題なかったので


$target_dir = Read-Host "Enter target dir"

と変更してスクリプトが動作するようになりました。

複数人でスクリプトを使い、オペレーション的な理由で英語は使いたくないという場合は
スクリプトを保存するときの文字コードを変えてあげましょう。

VS Codeの場合画面右下のほうに現在使用中の文字コードが表示されている部分があります。

そこをクリックしてエンコード付きで保存 > UTF-8 With BOMを選択すると
文字化けせずに日本語が使えるようになります。