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
它处理保留文件的原始编码。
我构建了一个简单的 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
它处理保留文件的原始编码。