powershell - ejemplos - sqlcmd linux
¿Cómo ejecutar sqlcmd desde powershell? (7)
Así es como construyo un comando externo en mis scripts
$scriptblock = {fullpath/sqlcmd -S `"(local)/instance1`" <# comment option -S #>`
-U a `
-P a `
-i `"c:/temp/sql.sql`" }
Invoke-Command -ScriptBlock $scriptBlock
Luego puede usar la variable $ args dentro de ella e incluso iniciarla remotamente.
$scriptblock = {fullpath/sqlcmd -S `"(local)/instance1`" <# comment option -S #>`
-U a `
-P a `
-i `"$($args[0])`" }
Invoke-Command -ScriptBlock $scriptBlock -argumentList "c:/temp/sql.sql" -computer "remote1"
Observación:
Esto permite comentar cada param.
Tenga cuidado de no olvidar un "` "y ningún espacio después de ellos donde están al final de la línea.
Tengo una cadena en powershell, que contiene un comando sqlcmd nativo. El comando en sí puede ejecutarse con éxito en cmd.exe. Tengo dificultades para ejecutarlos en powershell. ¿Alguien puede ayudar? Gracias.
Esto es sql.sql
select @@servername
go
select @@servicename
Este es el resultado cuando ejecuto el comando sqlcmd desde cmd.exe
C:/Users/test>sqlcmd -S "(local)/instance1" -U a -P a -i "c:/temp/sql.sql"
--------------------------------------------------
thesimpsons/INSTANCE1
(1 rows affected)
--------------------------------------------------
INSTANCE1
(1 rows affected)
C:/Users/test>
Este es el script powershell para llamar al comando sqlcmd.
$sql = @"
sqlcmd -S "(local)/instance1" -U a -P a -i "c:/temp/sql.sql"
"@
Invoke-Command $sql
Cuando ejecuto este script de powershell, recibí el siguiente error.
PS C:/TEMP> $sql = @"
sqlcmd -S "(local)/instance1" -U a -P a -i "c:/temp/sql.sql"
"@
Invoke-Command $sql
Invoke-Command : Parameter set cannot be resolved using the specified named parame
ters.
At line:5 char:15
+ Invoke-Command <<<< $sql
+ CategoryInfo : InvalidArgument: (:) [Invoke-Command], ParameterBin
dingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands
.InvokeCommandCommand
El primer parámetro posicional de invoke-command es -scriptblock, y espera un argumento de bloque de script. Para aprovechar una cadena de aquí para construir el comando y luego ejecutarlo con el comando invocar, necesita convertir la cadena de aquí en un bloque de secuencia de comandos:
$sql = @"
sqlcmd -S "(local)/instance1" -U a -P a -i "c:/temp/sql.sql"
"@
Invoke-Command ([scriptblock]::create($sql))
Esto es lo que me funcionó para usar sqlcmd desde el script powershell usando el operador &, ver muestra para generar un archivo csv:
& cmd / c "sqlcmd -S $ sv -i $ PROCFILE -s, -v varDB = $ dbclean -o $ filename"
$sv
tiene un nombre de servidor como SERVERNAME/INSTANCE
$PROCFILE
es como d:/TSTSQL/Sqlquery.SQL
$filename
d:/TSTSQL/Desiredoutfilename.CSV
es d:/TSTSQL/Desiredoutfilename.CSV
$dbclean
es un parámetro pasado al archivo sql
Para llamar a un ejecutable de Win32, desea utilizar el operador de llamada &
así:
& sqlcmd -S "(local)/instance1" -U a -P a -i "c:/temp/sql.sql"
También puede dejar de usar el ''SQLCMD.EXE'' externo y usar el cmdlet Invoke-Sqlcmd en su lugar:
Invoke-Sqlcmd es un cmdlet de SQL Server que ejecuta secuencias de comandos que contienen declaraciones de los idiomas (Transact-SQL y XQuery) y comandos compatibles con la utilidad sqlcmd
Simplemente abre la utilidad ''sqlps'' y ejecuta
Invoke-Sqlcmd -InputFile "C:/temp/sql.sql"
Por favor vea Ejecución de PowerShell de SQL Server.
También puede cargar los complementos de SQL Server manualmente en PowerShell antes de usar ''Invoke-Sqlcmd'';
para MS SQL Server 2012 puede hacerlo ejecutando
Import-Module SqlPs
Tanto el nombre de la instancia como el nombre de usuario deben estar completamente calificados
<domain_name>/Instanc_name
y <domai_name>/Username
. Sólo el nombre de su instancia está correctamente escrito.
Usa Invoke-Expression
lugar de Invoke-Command