我想使用
splatting打电话给
SqlPackage.exe
,但我做错了:
*** 路径中存在非法字符。
$FilePath = 'C:\some path\SqlPackage.exe'
$ArgumentList = @(
'/Action:Publish'
'/SourceFile:"C:\some path\blah.dacpac"'
'/TargetConnectionString:"Server=localhost; Database=Blah; Trusted_Connection=True;"'
)
& $FilePath $ArgumentList
按照这个答案,我似乎需要使用数组展开,对吗?问题似乎是处理 SqlPackage 的参数约定,
/[name]:"[value]"
,特别是双引号。
我该如何处理动态值?即:
$Blah = 'blah.dacpac'
$ArgumentList = @(
'/Action:Publish'
'/SourceFile:"C:\some path\$Blah"'
'/TargetConnectionString:"Server=localhost; Database=Blah; Trusted_Connection=True;"'
)
你的命令应该工作:
在 Windows PowerShell 和 PowerShell(核心) v7.2-:
在 PowerShell(核心)7.3+中:
$PSNativeCommandArgumentPassing
首选项变量 设置为 'Legacy'
。参见:
此答案了解背景信息。
这是您上一个问题的答案,即如何检查 PowerShell 最终在幕后构建的原始流程线。
因此:
& {
$PSNativeCommandArgumentPassing = 'Legacy' # Need in v7.3+
$FilePath = 'C:\some path\SqlPackage.exe'
$ArgumentList = @(
'/Action:Publish'
'/SourceFile:"C:\some path\blah.dacpac"'
'/TargetConnectionString:"Server=localhost; Database=Blah; Trusted_Connection=True;"'
)
& $FilePath $ArgumentList
}