以下代码,直接设置-v参数正在运行
$sqlcmd = @(Resolve-Path "$env:ProgramFiles\Microsoft SQL Server\*\Tools\binn\SQLCMD.EXE")[0]
$path1 = 'D:\somescript.sql'
& $sqlcmd -b -S NB-BK\SQLEXPRESS -d BK_Prod -U sa -P mypassword -l 180 -i $path1 -v Mandant=1 SAPMandant="009" SAPEinrichtung="0001"
但我需要一种从PowerShell变量设置这些值的方法。
我试过了:
$sqlcmd = @(Resolve-Path "$env:ProgramFiles\Microsoft SQL Server\*\Tools\binn\SQLCMD.EXE")[0]
$path1 = 'D:\somescript.sql'
$sqlcmdparameters = 'Mandant=1 SAPMandant="009" SAPEinrichtung="0001" '
& $sqlcmd -b -S NB-BK\SQLEXPRESS -d BK_Prod -U sa -P mypassword -l 180 -i $path1 -v $sqlcmdparameters
我发现了这个on SO,但它对我没有帮助。
答案 0 :(得分:2)
我发现以下解决方案适用于PowerShell V2
$sqlcmd = @(Resolve-Path "$env:ProgramFiles\Microsoft SQL Server\*\Tools\binn\SQLCMD.EXE")[0]
$path1 = 'D:\somescript.sql'
$cmdparameters = @(
'Mandant=1',
'SAPMandant="009"'
)
& $sqlcmd -b -S NB-BK\SQLEXPRESS -d BK_Prod -U sa -P mypassword -l 180 -i $path1 -v $cmdparameters
答案 1 :(得分:1)
尝试使用start-process。这就是我为Powershell命令行解析问题所做的事情。首先尝试调用operator(&),如果这不起作用,请将其包装在启动过程调用中。
$tempFile = [io.path]::GetTempFileName()
$exitCode = (start-process -FilePath $sqlcmd -ArgumentList @"
-b -S NB-BK\SQLEXPRESS -d BK_Prod -U sa -P mypassword -l 180 -i $path1 -v $sqlcmdparameters
"@ -Wait -RedirectStandardOutput $tempFile -NoNewWindow -Passthru).ExitCode
当使用启动过程时,通常需要捕获exitcode并将输出重定向到临时文件以获取结果。然后我会有一些代码来检查try / catch / finally块中的$ exitcode和cleanup临时文件