如何从powershell执行sqlcmd?
我在powershell中有一个字符串,其中包含本机sqlcmd命令。命令本身可以在cmd.exe中成功执行。我很难在powershell中执行它们。有人能帮忙吗?谢谢 这是sql.sql如何从powershell执行sqlcmd?,powershell,sqlcmd,Powershell,Sqlcmd,我在powershell中有一个字符串,其中包含本机sqlcmd命令。命令本身可以在cmd.exe中成功执行。我很难在powershell中执行它们。有人能帮忙吗?谢谢 这是sql.sql select @@servername go select @@servicename 这是从cmd.exe执行sqlcmd命令时的结果 C:\Users\test>sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql" ------
select @@servername
go
select @@servicename
这是从cmd.exe执行sqlcmd命令时的结果
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>
这是调用sqlcmd命令的powershell脚本
$sql = @"
sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"
"@
Invoke-Command $sql
执行此powershell脚本时,出现以下错误
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
PS C:\TEMP>$sql=@”
sqlcmd-S“(本地)\instance1“-U a-P a-i”c:\temp\sql.sql”
"@
调用命令$sql
Invoke命令:无法使用指定的命名参数解析参数集
特尔斯。
第5行字符:15
+调用命令使用Invoke Expression
而不是Invoke Command
调用Win32可执行文件要使用调用运算符&
,如下所示:
& sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"
这就是我在脚本中构建一些externals命令的方式
$scriptblock = {fullpath\sqlcmd -S `"(local)\instance1`" <# comment option -S #>`
-U a `
-P a `
-i `"c:\temp\sql.sql`" }
Invoke-Command -ScriptBlock $scriptBlock
$scriptblock={fullpath\sqlcmd-S`(本地)\instance1`”`
-U a`
-P a`
-i`“c:\temp\sql.sql`}
调用命令-ScriptBlock$ScriptBlock
然后,您可以在其中使用$args变量,甚至可以远程启动它
$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"
$scriptblock={fullpath\sqlcmd-S`(本地)\instance1`”`
-U a`
-P a`
-i`“$($args[0])`}
调用命令-ScriptBlock$ScriptBlock-argumentList“c:\temp\sql.sql”-计算机“remote1”
备注:
这允许对每个参数进行注释
注意不要忘记一个“`”,并且在它们后面没有空格,因为它们位于行的末尾 invoke命令的第一个位置参数是-scriptblock,它需要一个脚本块参数。要利用here字符串生成命令,然后使用invoke命令运行该命令,需要将here字符串转换为脚本块:
$sql = @"
sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"
"@
Invoke-Command ([scriptblock]::create($sql))
您也可以停止使用外部“SQLCMD.EXE”,而改用:
Invoke Sqlcmd是一个SQL Server cmdlet,它运行的脚本包含Sqlcmd实用程序支持的语言(Transact-SQL和XQuery)和命令中的语句
只需打开“sqlps”实用程序并运行
Invoke-Sqlcmd -InputFile "C:\temp\sql.sql"
请看
在使用“Invoke Sqlcmd”之前,您还可以在PowerShell中手动加载SQL Server管理单元
对于MS SQL Server 2012,您可以通过运行
导入模块SqlPs
实例名称和用户名都应该是完全限定的
\Instanc\u name
和\Username
。只有您的实例名称的脚本编写正确。这是我在powershell脚本中使用sqlcmd的有效方法,使用&operator,请参阅生成csv文件的示例:
&cmd/c“sqlcmd-S$sv-i$PROCFILE-S,-v varDB=$dbclean-o$filename”
$sv
的服务器名类似于SERVERNAME\INSTANCE
$PROCFILE
类似于d:\TSTSQL\Sqlquery.SQL
$filename
是d:\TSTSQL\Desiredoutfilename.CSV
$dbclean
是传递到sql文件的参数我不明白为什么人们在调用Win32可执行文件时会尝试使用调用表达式。。。这就是调用运算符的作用。@Andy-Invoke表达式允许您首先以字符串形式生成整个命令,这可能会根据具体情况而有所帮助。看,是的,但这不是在这里发生的。只有在需要计算表达式时才使用Invoke Expression。所要做的只是返回$sql中的值,它实际上不会执行它(至少不会在我的机器上)。相关:Andi Arismendi的答案很好,直接回答了sqlcmd可执行文件的执行,我相信这应该是公认的答案。如果您通过powershell运行sqlcmd脚本,只需使用Invoke sqlcmd.1即可节省时间、精力和击键次数。调用Sqlcmd不会实现Sqlcmd可用的所有命令。2.基本Powershell installInvoke Sqlcmd中不包含Invoke Sqlcmd。Invoke Sqlcmd会在存储过程的末尾添加分号,这会导致比较工具出现问题。请参阅,更不用说,Powershell 2.0不支持调用Sqlcmd。