powershellスクリプトの文字コードについて

Published by

on

powershellスクリプトを作成・実行していたときにはまったエラーの原因がスクリプトファイルを保存する際の文字コードであったので注意点を紹介します。

■保存時の文字コードに注意

PowershellスクリプトをPowershell ISEで作成した場合は問題ないのですが、メモ帳やその他エディタで作成して保存している場合は注意が必要です。スクリプトはUTF-8(BOM付き)での保存の必要があり、UTF-8でもBOMなしだと実行時に意図しないエラーが発生することがあります(私はこれでハマりました・・)。

スクリプト「send_mail.ps1」の内容は以下でした。

#設定
$smtpServer = "smtp.gmail.com"
$smtpPort   = 587
$from       = "note2selftest@gmail.com"
$to         = "note2selftest@gmail.com"
$subject    = "powershellからのメール"
$body       = "powershellからのメールです。"
$username = "note2selftest@gmail.com"
$password = "somepassword"
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force

#資格情報を生成
$credential = New-Object System.Management.Automation.PSCredential($username, $securePassword)

# メールメッセージ作成
$message = New-Object System.Net.Mail.MailMessage
$message.From = $from
$message.To.Add($to)
$message.Subject = $subject
$message.Body = $body
$message.BodyEncoding = [System.Text.Encoding]::UTF8

# SMTPクライアントの設定
$smtp = New-Object System.Net.Mail.SmtpClient($smtpServer, $smtpPort)
$smtp.EnableSsl = $true
$smtp.Credentials = $credential

# メール送信処理
try {
    $smtp.Send($message)
} catch {
    Write-Host "エラー: $($_.Exception.Message)"
}

私はよくサクラエディタにお世話になるのですが、問題となったスクリプトの文字コードを見ると以下のようにBOMなしのUTF-8でした。

本来は以下のようにBOM付きのUTF-8で保存しておく必要がありました。

ちなみにPowershell ISEで新規作成したスクリプトを保存するとデフォルトでUTF-8(BOM付き)となっていました。

コメントを残す