はじめに
Azure Automation Runbook で PowerShell スクリプトを作成・実行した際、以下のようなエラーに遭遇したことはありませんか?
コードに文法的な誤りはないはずなのに、なぜかパースエラーになる…
発生場所 ps1:73 文字:9
+ try {
+ ~
ステートメント ブロックまたは型定義に終わりの '}' が存在しません。
発生場所 C:\Users\xxxxx\Desktop\project\xxxxx\xxxxxx\runbooks\shells\xxxxxx.ps1:87 文字:44
+ throw "譛溷セ・☆繧九せ繝・・繧ソ繧ケ繧ウ繝シ繝・200)縺ィ逡ー縺ェ繧翫∪縺吶ょ叙蠕怜、: $stat
...
+ ~
Try ステートメントに Catch ブロックまたは Finally ブロックがありません。
原因はファイルエンコードにあります。
本記事では、Runbook作成でハマりやすいエンコード問題の解説と設定方法についてご紹介します。
ハマりポイント:UTF-8 BOM問題
日本語文字列を含むスクリプトをVS Codeで UTF-8 として保存すると、PowerShell 5.1 がファイルを Shift-JIS として読み込もうとします。
その結果、日本語文字列が文字化けし、PowerShellが 構文として解釈できず パースエラーが発生します。
# 本来のコード
throw "期待するステータスコード(200)と異なります"
# PowerShell 5.1がShift-JISとして読んだ結果(文字化け)
throw "譛溷セ・☆繧九せ繝・・繧ソ...
解決方法
VS Code での変換手順:


