Revisamos de forma completamente cada artículos de nuestra página web con la meta de mostrarte siempre información veraz y certera.
Solución:
Después de investigar usando alguna reflexión sobre
C:Archivos de programa (x86)Microsoft SQL Server120ToolsPowerShellModulesSQLPSMicrosoft.SqlServer.Management.PSSnapins.dll
Mirando a ExecutionProcessor
las siguientes líneas revelan el problema de que fallará si hay más de un signo igual en la definición de la variable.
Mi recomendación para cualquiera que intente usar Invoke-SqlCmd
es ahorrar tiempo y cordura y simplemente usar la alternativa de código abierto Invoke-SqlCmd2 en su lugar.
Microsoft, por favor corrija.
Usar CHAR(61)
para reemplazar el signo igual.
$variable = "'Hello=World'"
$variables = @( "MyVariable=$($variable.replace("=","'+CHAR(61)+'"))" )
Invoke-SqlCmd -ServerInstance 'localhost' -Database 'master' -Query 'SELECT $(MyVariable) AS foo' -Variable $variables
También me encontré con la necesidad de pasar una pieza de información codificada en base64 que tenía esos molestos ‘=’ en ellos. Lo que funcionó para mí fue agregar un token de reemplazo en la variable array que paso a la consulta y luego uso la función REEMPLAZAR de SQL en mi consulta para reemplazar mi token con un signo ‘=’.
Entonces puedes actualizar tu código para que se vea así:
$equalsSignReplacement = '[EQUALSIGN]'
$myVariable = 'aGVsbG8NCg=='
$variables =
"EqualsSignReplacement=$($equalsSignReplacement)",
"MyVariable=$($myVariable.Replace('=',$equalsSignReplacement))"
Invoke-SqlCmd `
-ServerInstance 'localhost' `
-Database 'master' `
-Username 'matthew' `
-Password 'qwerty' `
-Query 'SELECT REPLACE('$(MyVariable)','$(EqualsSignReplacement)','=') AS foo' `
-Variable $variables
La desventaja de esta solución es que debe ser proactivo con su aplicación. Debe saber con anticipación qué variables pueden tener un ‘signo igual’ y luego actualizar no solo su código de PowerShell, sino también sus scripts SQL para asegurarse de que el reemplazo se realice correctamente.
Solo asegúrese de usar un token de reemplazo que sea único para sus variables para que no reemplace accidentalmente el texto válido con ‘=’ en sus consultas.
Ten en cuenta dar difusión a esta división si te ayudó.