powershell - El bloque de código impide que el script se ejecute, pero se ejecuta de forma interactiva
powershell-v4.0 powershell-v5.0 (1)
Tengo un script que se ejecuta como una tarea programada que falla con un error de token inesperado en la línea donde se define $ As. Si elimino el código, la secuencia de comandos se ejecuta correctamente. Si pego todo el script (incluida la sección problemática) en una ventana de PowerShell todo se ejecuta como se esperaba.
Supongo que se trata de un simple error que no he encontrado, pero no puedo entender cuál es el problema, se apreciarán los ojos más experimentados.
Esto se está ejecutando en el Servidor 2012R2, con PS 5.0.117, pero también en la versión 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
}
El error exacto que recibo es:
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.
Si hago un comentario de $ As, sucede con $ Ns y $ Os. Si hago un comentario de $ As, $ Ns y $ Os, funciona bien.
PowerShell puede detectar las siguientes codificaciones desde la lista de materiales del archivo de comandos: UTF-8, UTF-16 (LE y BE) y UTF-32 (LE y BE). Si la BOM no está presente, PowerShell utiliza Encoding.Default
para el archivo de script. Entonces, su archivo de script UTF-8 debe incluir BOM para que se reconozca UTF-8.
En su caso, se produce un error debido a que PowerShell interpreta todos los caracteres siguientes: ''''''‚‛
- como carácter de comillas simples. Entonces, cuando su archivo de script fue leído con una codificación incorrecta, algunas partes de lo que eran los literales de cadena obtuvieron un significado especial y causaron una violación de sintaxis.
$As = ''[?ÀÃÂÃÄÅÆà áâãäåæ]'',''a''
^
$Ns = ''[?Ññ]'',''n''
^
$Os = ''[?ÒÓÔÕÖØðòóôõöø]'',''o''
^