无法从 PowerShell 运行 bcp 命令
Posted
技术标签:
【中文标题】无法从 PowerShell 运行 bcp 命令【英文标题】:Unable to run bcp command from PowerShell 【发布时间】:2020-02-12 02:06:15 【问题描述】:我必须从 PowerShell 脚本调用 bcp.exe
。我的代码是:
$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
实用程序:
$bcp_args = "$bcp $dataBase.$ProdEinheitTable IN $datFileName -f $fmtFileName -U $sqlServerUserName -P sqlServerPassword -S $server -n"
Invoke-Expression $bcp_args
它给了我错误
用法::术语“用法:”不被识别为 cmdlet、函数的名称, 脚本文件或可运行的程序。检查名称的拼写,或者如果路径 已包含,请验证路径是否正确,然后重试。 在行:1 字符:1 + 用法:C:\Program Files\Microsoft SQL Server\110\Tools\Binn\bcp.exe ... +~~~~~~ + CategoryInfo : ObjectNotFound: (usage::String) [], CommandNotFoundException +fullyQualifiedErrorId:CommandNotFoundException如果我从字符串中删除 &
我会得到异常
如何从 PowerShell 调用 bcp
?
【问题讨论】:
我会尝试使用Start-Process 和-ArgumentList
参数。
Do not use Invoke-Expression
.
【参考方案1】:
您的代码无法按您期望的方式运行的原因(除了您首先shouldn't be using Invoke-Expression
)是因为您的期望似乎是这样的
$bcp = & 'C:\Program Files\Microsoft SQL Server\110\Tools\Binn\bcp.exe'
将定义某种命令调用别名。事实并非如此。该语句不带参数直接调用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
【讨论】:
【参考方案2】:尝试以下操作:
$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"
Start-Process -FilePath $bcp -ArgumentList $bcp_args
【讨论】:
【参考方案3】:另一种使用调用运算符的方法,例如此处使用以某种方式正常工作的 args 数组:https://com2kid.wordpress.com/2011/09/25/powershell-call-operator-using-an-array-of-parameters-to-solve-all-your-quoting-problems/
$bcp = 'C:\Program Files\Microsoft SQL Server\110\Tools\Binn\bcp.exe'
$bcp_args = echo $bcp $dataBase.$ProdEinheitTable IN $datFileName -f $fmtFileName -U $sqlServerUserName -P sqlServerPassword -S $server -n
& $bcp $bcp_args
【讨论】:
以上是关于无法从 PowerShell 运行 bcp 命令的主要内容,如果未能解决你的问题,请参考以下文章
C:\Windows\System32\bcp47mrm.dll没有被指定在Windows上运行,或者它包含错误。 这个怎么解决?