我使用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的虚拟机映像
find / replace工作正常,我可以重命名.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
我收到错误:
" Import-VM:无法读取虚拟机配置。数据可能已损坏或无效。"
有谁知道这是为什么?我已经提出了一种解决方法(使用不同的技术),但它仍然令人沮丧。如果我打开一个文本编辑器并手动重命名它,它可以正常工作。
答案 0 :(得分:1)
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
}
更多相关信息:http://powershell.org/wp/2013/10/21/why-get-content-aint-yer-friend/
答案 1 :(得分:1)
我遇到了同样的问题,这就是我如何解决它的问题:
<强>问题强>
当我尝试使用PowerShell编辑Citrix Receiver * .ica文件时。如果我用记事本打开文件,替换我想要的文本,然后保存它,Receiver将启动会话。但是,如果我使用Get-Content然后使用Out-File使用PowerShell,则该文件看起来很正常,但Receiver无法读取并报告一般错误。
<强>解决方案强>
解决方案证明,默认情况下,Out-File以Unicode格式写入。我需要将编码格式更改为ASCII,以使其具有Receiver所需的格式。