Xml 在PowerShell中查找并替换会生成损坏/无效的文件

Xml 在PowerShell中查找并替换会生成损坏/无效的文件,xml,powershell,hyper-v,Xml,Powershell,Hyper V,我正在使用PowerShell编辑XML文件。我正在做的是搜索一个字符串并在XML中替换该字符串。用于此操作的命令如下所示: (Get-Content "C:\My_VM\Virtual Machines\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.XML") | Foreach-Object {$_ -replace "My_VMName", "My_VMName_0"} | Set-Content "C:\My_VM\Virtual Machines\xxxx

我正在使用PowerShell编辑XML文件。我正在做的是搜索一个字符串并在XML中替换该字符串。用于此操作的命令如下所示:

(Get-Content "C:\My_VM\Virtual Machines\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.XML") | 
Foreach-Object {$_ -replace "My_VMName", "My_VMName_0"} |
Set-Content "C:\My_VM\Virtual Machines\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.XML"
其中,我的示例中的XML文件是要导入Hyper-V的虚拟机映像

查找/替换工作正常,我可以为导入重命名.vhdx文件,也没有问题。我使用以下方法进行此操作:

Rename-Item "C:\My_VM\Virtual Hard Disks\My_VMName.vhdx" My_VMName_0.vhdx
但当我尝试使用以下cmdlet使用导入VM时:

Import-VM -Path "C:\My_VM\Virtual Machines\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.XML" -Copy -GenerateNewID
我得到一个错误:

“导入VM:无法读取虚拟机配置。数据可能已损坏或无效。”

有人知道这是为什么吗?我已经想出了一个解决办法(使用不同的技术),但仍然令人沮丧。如果我打开一个文本编辑器并手动重命名所有内容,它工作正常。

你能试试这个吗? 您可能对换行符等有问题

ForEach ($line in (Get-Content "C:\My_VM\Virtual Machines\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.XML")) {
  $line -replace "My_VMName", "My_VMName_0" | Out-File new.txt -Append
}

更多信息:

我遇到了完全相同的问题,我就是这样解决的:

问题

当我尝试使用PowerShell编辑Citrix Receiver*.ica文件时。如果我用记事本打开文件,替换我想要的文本,然后保存它,接收方将启动会话。但是,如果我使用PowerShell使用Get Content然后使用Out File,则该文件看起来正常,但接收方不会读取该文件并报告一个一般错误

解决方案


解决方案是,默认情况下,以Unicode格式写入文件。我需要将编码格式更改为ASCII,以使其符合接收方要求的格式。

您是否尝试过
Get Content-encoding UTF8C:我的虚拟机…
相应地设置内容编码UTF8
?不,我没有,但我会的,我会给你回电话的。恐怕是同样的错误。我现在试试这个,然后给你回电话。答对了,她成功了。非常感谢,这真是令人头痛的事。编码错误。谢谢你,詹姆斯。我只是在别处读到了完全相同的答案。将-Encoding ASCII开关添加到Out File命令修复了该问题