0

-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

SOでこれを見つけましたが、役に立ちませんでした。

4

2 に答える 2

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
于 2012-08-25T16:25:31.123 に答える
1

start-process を使用してみてください。これは、Powershell コマンド ライン解析の問題に対して私が行っていることです。まず、呼び出し演算子 (&) を試してください。それが機能しない場合は、開始プロセス呼び出しでラップします。

$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

通常、start-process を使用する場合は、終了コードをキャプチャし、出力を一時ファイルにリダイレクトして結果を取得する必要があります。次に、$exitcode をチェックし、try/catch/finally ブロックで一時ファイルをクリーンアップするコードをいくつか用意します。

于 2012-08-25T15:46:06.487 に答える