提问人:spottedmahn 提问时间:10/24/2023 最后编辑:marc_sspottedmahn 更新时间:10/26/2023 访问量:50
路径中的非法字符 - 通过 SqlPackage.exe 进行 dacpac 部署
Illegal characters in path - dacpac deployment via SqlPackage.exe
问:
我想使用展开调用,但是我做错了什么,因为我收到一个错误: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;"'
)
答:
1赞
mklement0
10/24/2023
#1
您的命令应该有效:
在 Windows PowerShell 和 PowerShell (Core) v7.2- 中:
默认情况下。
在幕后构造的原始进程命令行如下所示:
"C:\some path\SqlPackage.exe" /Action:Publish /SourceFile:"C:\some path\blah.dacpac" /TargetConnectionString:"Server=localhost; Database=Blah; Trusted_Connection=True;"
在 PowerShell (Core) 7.3+ 中:
仅当您(临时)将
$PSNativeCommandArgumentPassing
首选项变量设置为 时。'Legacy'
否则(使用 value(默认值)或 ),原始进程命令行如下所示 - 请注意某些参数的整体外壳以及嵌入的字符如何转义为:
'Windows'
'Standard'
"..."
"
\"
"C:\some path\SqlPackage.exe" /Action:Publish "/SourceFile:\"C:\some path\blah.dacpac\"" "/TargetConnectionString:\"Server=localhost; Database=Blah; Trusted_Connection=True;\""
看:
因此:
& {
$PSNativeCommandArgumentPassing = 'Legacy' # Needed 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
}
评论