Jus*_*ner 20 powershell sqlcmd
我在powershell中有一个字符串,其中包含一个本机sqlcmd命令.命令本身可以在cmd.exe中成功执行.我很难在powershell中执行它们.有人可以帮忙吗?谢谢.
这是sql.sql
select @@servername
go
select @@servicename
Run Code Online (Sandbox Code Playgroud)
这是从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>
Run Code Online (Sandbox Code Playgroud)
这是用于调用sqlcmd命令的powershell脚本.
$sql = @"
sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"
"@
Invoke-Command $sql
Run Code Online (Sandbox Code Playgroud)
当我执行此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
Run Code Online (Sandbox Code Playgroud)
And*_*ndi 24
要调用Win32可执行文件,您需要使用这样的调用操作符&:
& sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"
Run Code Online (Sandbox Code Playgroud)
use*_*531 18
您也可以停止使用外部'SQLCMD.EXE'并使用Invoke-Sqlcmd cmdlet:
Invoke-Sqlcmd是一个SQL Server cmdlet,它运行包含语言(Transact-SQL和XQuery)语句的脚本以及sqlcmd实用程序支持的命令
只需打开'sqlps'实用程序并运行即可
Invoke-Sqlcmd -InputFile "C:\temp\sql.sql"
Run Code Online (Sandbox Code Playgroud)
您还可以在使用"Invoke-Sqlcmd"之前在PowerShell中手动加载SQL Server管理单元;
对于MS SQL Server 2012,您可以通过运行来实现
Import-Module SqlPs
这就是我在脚本中构建一些外部命令的方法
$scriptblock = {fullpath\sqlcmd -S `"(local)\instance1`" <# comment option -S #>`
-U a `
-P a `
-i `"c:\temp\sql.sql`" }
Invoke-Command -ScriptBlock $scriptBlock
Run Code Online (Sandbox Code Playgroud)
然后你可以在里面使用$ 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"
Run Code Online (Sandbox Code Playgroud)
备注:
这允许评论每个参数.
小心不要忘记"`",并且在它们位于线的末尾之后没有空格.
| 归档时间: |
|
| 查看次数: |
54217 次 |
| 最近记录: |