ガイド

PowerShellでスクリプト実行できない原因と直し方、BOM無しUTF-8の.ps1で文字化け

2026-11-09

この記事で切り分けられること

Windows PowerShell 5.1で .ps1 を実行したときに「文字列に終端記号 " がありません」のようなパースエラーが出て、エラー文の中の日本語が化けている場合の原因と直し方を記録する。

症状

本人が install_apply_autopilot.ps1 を実行したところ、次のようなエラーで止まった。

スクリプトの内容自体は書き換えていないのに、保存して実行するたびに同じ場所で構文エラーになった。

原因

Windows PowerShell 5.1 は、BOM(バイトオーダーマーク)が付いていないUTF-8ファイルをANSI(cp932)として読み込む。これが原因だった。

エラー文の「日仁E」という化け方は、まさにこのcp932誤読の典型的な症状だった。

直し方

ファイルをUTF-8 with BOMで書き直すことで解決した。Pythonでファイルを生成・修正している場合は、保存時のエンコーディング指定を utf-8-sig にする。

with open(r"C:/Users/<あなたのユーザー名>/<あなたのフォルダ>/install_apply_autopilot.ps1", "w", encoding="utf-8-sig") as f:
    f.write(script_text)

保存し直したら、実行する前に構文だけを確認する。PowerShell上で次のコマンドを実行し、エラーが出ないことを確かめてから渡す。

$errors = $null
[System.Management.Automation.Language.Parser]::ParseFile(
    "C:/Users/<あなたのユーザー名>/<あなたのフォルダ>/install_apply_autopilot.ps1",
    [ref]$null,
    [ref]$errors
) | Out-Null
$errors

$errors が空であれば構文は壊れていない。

あわせて気をつけたパス指定

実行環境の入力欄(! 実行)はPOSIXシェル経由のため、C:\Users\... のようにバックスラッシュを使うと文字が食われることがあった。次のどちらかで回避する。

再発防止

  1. 本人が実行する .ps1 に日本語を書く場合は、必ずBOM付きUTF-8(utf-8-sig)で保存する
  2. 保存後は [System.Management.Automation.Language.Parser]::ParseFile で構文エラーが無いことを確認してから渡す

それでも駄目なときに次に見る場所

確認項目見る場所
ファイルのエンコーディングエディタやスクリプトでBOM付きUTF-8になっているか再確認する
エラー文の日本語が化けているか化けていればエンコーディング起因の可能性が高い
パスの区切り文字実行する入力欄がPOSIXシェル経由かどうかを確認し、スラッシュまたはシングルクォートを使う
ParseFileの結果$errors の中身を見て、どの行・どの文字位置でエラーになっているか確認する

同じような作業を自動にできるかどうか、無料でお返しします。いまのファイルと手順を見せてください。

お問い合わせ →