2016-05-13 21 views
4

Ich habe ein Skript, das als eine geplante Aufgabe ausgeführt wird, die mit einem unerwarteten Token-Fehler in der Zeile fehlschlägt, in der $ As definiert ist. Wenn ich den Code entferne, wird das Skript ordnungsgemäß ausgeführt. Wenn ich das gesamte Skript (einschließlich des problematischen Abschnitts) in ein PowerShell-Fenster einfüge, läuft alles wie erwartet.Codeblock verhindert, dass Skript ausgeführt wird, aber interaktiv ausgeführt wird

Ich nehme an, das ist eine einfache gotcha, die ich gerade nicht angetroffen habe, aber ich kann nicht herausfinden, was das Problem damit ist, erfahrene Augen würden geschätzt werden.

Dies wird auf dem Server ausgeführt wird 2012R2, mit PS 5.0.117 aber auch unter Version geschah 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 
    } 

Der genaue Fehler Ich erhalte ist:

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. 

Wenn ich den Kommentar aus $ As, das passiert mit $ Ns und $ Os. Wenn ich $ As, $ Ns und $ Os auskommentiere, läuft es gut.

Antwort

7

PowerShell erkennt folgende Codierungen anhand der Skriptdatei BOM: UTF-8, UTF-16 (LE und BE) und UTF-32 (LE und BE). Wenn BOM nicht vorhanden ist, verwenden Sie PowerShell Encoding.Default für Skriptdatei. Daher sollte Ihre UTF-8-Skriptdatei BOM enthalten, damit UTF-8 erkannt wird.

In Ihrem Fall passiert Fehler aufgrund PowerShell interpretieren alle folgenden Zeichen: '‘’‚‛ - als einzelnes Anführungszeichen. Wenn Ihre Skriptdatei mit falscher Codierung gelesen wurde, erhalten einige Teile von String-Literalen eine besondere Bedeutung und verursachen Syntaxverletzungen.

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

Danke. Das erneute Speichern der Datei mit der Stückliste hat dies behoben. Vielen Dank für die Bereitstellung der Hintergrundinformationen zu dem Problem und nicht nur für die Fehlerbehebung. –

Verwandte Themen