2016-05-13 6 views
4

$ Asが定義されている行で予期しないトークンエラーが発生して失敗するスケジュールされたタスクとして実行されるスクリプトがあります。コードを削除すると、スクリプトは正常に実行されます。スクリプト全体(問題のあるセクションを含む)をPowerShellウィンドウに貼り付けると、すべてが期待通りに実行されます。コードブロックにより、スクリプトは実行されませんが、対話的に実行されます

私はこれが私が遭遇したことのない単純な問題であると仮定していますが、問題が何であるか把握することはできません。

これは、PS 5.0.117で、サーバー2012R2上で実行されても、私が受け取る正確なエラーがあるバージョン4

# Sanitize $UserLogon 
$Garbage = "[?\' ]",'' 
$As = '[?ÀÁÂÃÄÅÆàáâãäåæ]','a' 
$Cs = '[?Çç]','c' 
$Es = '[?ÈÉÊËèéêë]','e' 
$Is = '[?ÌÍÎÏìíîï]','i' 
$Ns = '[?Ññ]','n' 
$Os = '[?ÒÓÔÕÖØðòóôõöø]','o' 
$Ss = '[?ß]','s' 
$Us = '[?ÙÚÛÜùúûü]','u' 
$Thorns = '[?Þþ]','th' 

$TextReplacers = $Garbage, $As, $Cs, $Es, $Is, $Ns, $Os, $Ss, $Us, $Thorns 

foreach ($Replacement in $TextReplacers) { 
    $UserLogon = $UserLogon -replace $Replacement 
    } 

の下で起こっている:

At C:\Scripts\Onboarding\CreateUserAccount0.ps1:121 char:17 
+  $As = '[?ÀÃÂÃÄÅÆàáâãäåæ]','a' 
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

Unexpected token 'ÃÄÅÆàáâãäåæ]','a' 
    $Cs = '[?Çç]','c' 
    $Es = '[?ÈÉÊËèéêë]','e' 
    $Is = '[?ÃŒÃÃŽÃìíîï]','i' 
    $Ns = '[?Ññ]','n' 
    $Os = '[?ÒÓÔÕÖØðòóôõöø]','o' 
    $Ss = '[?ß]','s' 
    $Us = '[?ÙÚÛÜùúûü]','u' 
    $Thorns = '[?Þþ]','th' 

    $TextReplacers = $Garbage, $As, $Cs, $Es, $Is, $Ns, $Os, $Ss, $Us, $Thorns 

    foreach ($Replacement in $TextReplacers) { 
     $UserLogon = $UserLogon -replace $Replacement 
     } 
# Check if AD user already exists. 
$UserExists = Get-ADUser -Filter {SamAccountName -eq $UserLogon} 
if ($UserExists -ne $Null){ 
    $email = new-object Net.Mail.SMTPClient($mailServer) 
    $err += "$UserLogon' in expression or statement. 

私がコメントアウトした場合$ As、$ Ns、$ Osで起こります。 $ As、$ Ns、$ Osをコメントアウトすると、正常に動作します。

答えて

7

PowerShellは、スクリプトファイルBOM(UTF-8、UTF-16(LEおよびBE)およびUTF-32(LEおよびBE))から次のエンコーディングを検出できます。 BOMが存在しない場合、PowerShellはスクリプトファイルにEncoding.Defaultを使用します。そのため、UTF-8スクリプトファイルにはUTF-8用のBOMが含まれている必要があります。

あなたのケースでは、PowerShellが次のすべての文字:'‘’‚‛ - を一重引用符として解釈するため、エラーが発生します。したがって、スクリプトファイルが誤ったエンコードで読み取られた場合、文字列リテラルの一部は特別な意味を持ち、構文違反が発生します。

$As = '[?ÀÃÂÃÄÅÆà áâãäåæ]','a' 
      ^
$Ns = '[?Ññ]','n' 
     ^
$Os = '[?ÒÓÔÕÖØðòóôõöø]','o' 
     ^
+0

ありがとうございました。 BOMでファイルを再保存すると、これが修正されました。問題が単なる修正ではなく、その背景に関する詳細を提供していただきありがとうございます。 –

関連する問題