Powershell Set-Content 似乎损坏了我的 SSIS .dtsx 文件

Powershell Set-Content seems to corrupt my SSIS .dtsx files

我构建了一个简单的 powershell 脚本,它使用 get-content / set-content 替换了 dtsx 文件中的 xml 路径配置。

(Get-Content $file.PSPath) | ForEach-Object {$_ -replace $searchtext , $replacetext} | Set-Content $file.PSPath

当我使用它并尝试从 sql 服务器代理作业 运行 包时,我收到一条错误消息:

"Unable to load the package as XML because of package does not have a valid XML format."

如果我自己用 sublime 编辑文件而不使用脚本就可以了。

替换正常,我使用 kdiff 比较文件,没有差异。

有什么想法吗?

Set-Content默认为ASCII编码。我想知道该文件是否是带有 BOM 的 UTF8。尝试使用 Set-Content $file.PSPath -Enc Utf8。或者可能是 Unicode,在这种情况下使用 -Encoding Unicode.

FWIW 这些类型的问题是我将编辑文件添加到 PowerShell Community Extensions 的原因。有了它,您可以像这样编辑文件:

Edit-File $file.PSPath $searchText $replacementText

它处理保留文件的原始编码。