无法从 PowerShell 运行 bcp 命令

Wal*_*eed 1 powershell bcp

我必须bcp.exe从 PowerShell 脚本调用。我的代码是:

$dataBase = 'MyDb'
$ProdEinheitTable = 'dbo.ProdEinheit'
$ProzessdatenTable = 'dbo.Prozessdaten_aktuell'
$sqlServerUserName = 'sa'
$sqlServerPassword = 'Password'
$server = 'MSSQLLocalDB'

$bcp = & 'C:\Program Files\Microsoft SQL Server\110\Tools\Binn\bcp.exe'
Run Code Online (Sandbox Code Playgroud)

bcp像这样调用该实用程序:

$bcp_args = "$bcp $dataBase.$ProdEinheitTable IN $datFileName -f $fmtFileName -U $sqlServerUserName -P sqlServerPassword -S $server -n"
Invoke-Expression $bcp_args
Run Code Online (Sandbox Code Playgroud)

它给了我错误

用法::术语“用法:”未被识别为 cmdlet、函数、
脚本文件或可运行的程序。检查名称的拼写,或者是否有路径
包含在内,请验证路径是否正确,然后重试。
在行:1 字符:1
+ 用法:C:\Program Files\Microsoft SQL Server\110\Tools\Binn\bcp.exe { ...
+~~~~~~
    + CategoryInfo : ObjectNotFound: (usage::String) [], CommandNotFoundException
    + FullQualifiedErrorId : CommandNotFoundException

如果我&从字符串中删除,我会得到异常

C:\Program :术语“C:\Program”不被识别为 cmdlet 的名称,
函数、脚本文件或可运行的程序。检查名称的拼写,或
如果包含路径,请验证路径是否正确,然后重试。
在行:1 字符:1
+ C:\Program Files\Microsoft SQL Server\110\Tools\Binn\bcp.exe MyDb.dbo ...
+ ~~~~~~~~~~
    + CategoryInfo : ObjectNotFound: (C:\Program:String) [], CommandNotFoundException
    + FullQualifiedErrorId : CommandNotFoundException

如何bcp从 PowerShell调用?

Ans*_*ers 7

您的代码没有按照您期望的方式工作的原因(除了您不应该首先使用Invoke-Expression的事实)是因为您的期望似乎是

$bcp = & 'C:\Program Files\Microsoft SQL Server\110\Tools\Binn\bcp.exe'
Run Code Online (Sandbox Code Playgroud)

将定义某种命令调用别名。事实并非如此。该语句bcp.exe不带参数直接调用,并将命令的输出存储在变量中$bcp(常规输出,而不是错误输出)。

这应该有效:

$dataBase = 'MyDb'
$ProdEinheitTable = 'dbo.ProdEinheit'
$ProzessdatenTable = 'dbo.Prozessdaten_aktuell'
$sqlServerUserName = 'sa'
$sqlServerPassword = 'Password'
$server = 'MSSQLLocalDB'

$bcp = 'C:\Program Files\Microsoft SQL Server\110\Tools\Binn\bcp.exe'

$bcp_args = "${dataBase}.${ProdEinheitTable}", 'IN', $datFileName,
            '-f', $fmtFileName, '-U', $sqlServerUserName,
            '-P', $sqlServerPassword, '-S', $server, '-n'

& $bcp @bcp_args
Run Code Online (Sandbox Code Playgroud)