Xml 在PowerShell中查找并替换会生成损坏/无效的文件
我正在使用PowerShell编辑XML文件。我正在做的是搜索一个字符串并在XML中替换该字符串。用于此操作的命令如下所示: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
(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命令修复了该问题