使用 PowerShell 编辑 XML 和“文件格式”错误

2024-03-22

我正在使用 Codeplex 中的 HyperV 模块从 2008R2 Hyper-V 服务器执行“仅配置”导出。为了导入另一台 HyperV 服务器上的配置,我需要编辑 EXP 文件中 CopyVMStorage 的值。该文件是一个 XML 文件。我在 PowerShell 中编写了以下代码来为我进行更新。变量 $existing 是现有的 exp 文件。

$xml = [xml](get-content $existing)
$xpath = '//PROPERTY[@NAME ="CopyVmStorage"]'
foreach ($node in $xml.SelectNodes($xpath))
    {$node.Value = 'TRUE'}
$xml.Save($existing)

此代码对 XML 进行了正确的更改。但是,当我在 Hyper-V 服务器上导入文件时,收到一条错误消息:“文件格式不正确”。我想知道文件的编码是否不正确或者是否存在其他问题。如果我在写字板中手动编辑文件,则导入不会出现问题。

我注意到使用 PowerShell 更新的文件是格式化的,而原始文件是 xml,所有文件都挤在一起,没有空格。

关于此 HyperV 错误消息中的“文件格式”可能意味着什么,以及如何使用我的代码自动执行 XML 中的此更改并能够使用它导入虚拟机配置,有什么想法吗?

XML之前

<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<DECLARATIONS>
  <DECLGROUP>
    <VALUE.OBJECT><INSTANCE CLASSNAME="Msvm_VirtualSystemExportSettingData"><PROPERTY NAME="Caption" TYPE="string"><VALUE>Virtual System Export Setting Data</VALUE></PROPERTY><PROPERTY NAME="CopySnapshotConfiguration" TYPE="uint8"><VALUE>0</VALUE></PROPERTY><PROPERTY NAME="CopyVmRuntimeInformation" TYPE="boolean"><VALUE>FALSE</VALUE></PROPERTY><PROPERTY NAME="CopyVmStorage" TYPE="boolean"><VALUE>FALSE</VALUE></PROPERTY><PROPERTY NAME="CreateVmExportSubdirectory" TYPE="boolean"><VALUE>TRUE</VALUE></PROPERTY><PROPERTY NAME="Description" TYPE="string"><VALUE>Microsoft Virtual System Export Setting Data</VALUE></PROPERTY><PROPERTY NAME="ElementName" TYPE="string"><VALUE>Microsoft Virtual System Export Setting Data</VALUE></PROPERTY><PROPERTY NAME="InstanceID" TYPE="string"><VALUE>Microsoft:A1F914F2-F38E-48A6-B1EE-58B84ECEAC0C</VALUE></PROPERTY><PROPERTY NAME="SnapshotVirtualSystem" TYPE="string"></PROPERTY></INSTANCE>
</VALUE.OBJECT>

XML 之后

<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<DECLARATIONS>
  <DECLGROUP>
    <VALUE.OBJECT>
      <INSTANCE CLASSNAME="Msvm_VirtualSystemExportSettingData">
        <PROPERTY NAME="Caption" TYPE="string">
          <VALUE>Virtual System Export Setting Data</VALUE>
        </PROPERTY>
        <PROPERTY NAME="CopySnapshotConfiguration" TYPE="uint8">
          <VALUE>0</VALUE>
        </PROPERTY>
        <PROPERTY NAME="CopyVmRuntimeInformation" TYPE="boolean">
          <VALUE>FALSE</VALUE>
        </PROPERTY>
        <PROPERTY NAME="CopyVmStorage" TYPE="boolean">
          <VALUE>TRUE</VALUE>
        </PROPERTY>
        <PROPERTY NAME="CreateVmExportSubdirectory" TYPE="boolean">
          <VALUE>TRUE</VALUE>
        </PROPERTY>
        <PROPERTY NAME="Description" TYPE="string">
          <VALUE>Microsoft Virtual System Export Setting Data</VALUE>
        </PROPERTY>
        <PROPERTY NAME="ElementName" TYPE="string">
          <VALUE>Microsoft Virtual System Export Setting Data</VALUE>
        </PROPERTY>
        <PROPERTY NAME="InstanceID" TYPE="string">
          <VALUE>Microsoft:A1F914F2-F38E-48A6-B1EE-58B84ECEAC0C</VALUE>
        </PROPERTY>
        <PROPERTY NAME="SnapshotVirtualSystem" TYPE="string">
        </PROPERTY>
      </INSTANCE>
    </VALUE.OBJECT>

注意:这是来自的交叉帖子https://serverfault.com/questions/231186/code-to-update-hyperv-export-file https://serverfault.com/questions/231186/code-to-update-hyperv-export-file。我认为这实际上更多的是编码/开发问题,而不是 IT 专业人员的问题。


实例化 XmlTextWriter 并将 Formatting 属性设置为“None”应该可以满足您的要求。您可以尝试类似的方法并根据您的具体需求进行修改。

function NoFormat-XML ([xml]$xml)
{
    $StringWriter = New-Object System.IO.StringWriter
    $XmlWriter = New-Object System.XMl.XmlTextWriter $StringWriter
    $xmlWriter.Formatting = "None"
    $xml.WriteContentTo($XmlWriter)
    $XmlWriter.Flush()
    $StringWriter.Flush()
    Write-Output $StringWriter.ToString()
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PowerShell 编辑 XML 和“文件格式”错误 的相关文章

  • 如何使用 PowerShell 2 的导出 csv 附加文件?

    filesremoved export csv Path E Code powershell logs filesremoved txt NoTypeInformation 我也尝试过 filesremoved export csv Pat
  • 使用 powershell 版本 2 查询 AD

    我们有由 Windows 7 和 Windows 10 组成的混合桌面操作系统 我有一个登录脚本 该脚本从每次用户登录时运行的 powershell 脚本收集各种信息 Windows 7 powershell 仅是版本 2 这意味着我无法使
  • 如何在 Perl 中发送此 SOAP XML?

    我必须发送下面的 XML 我有no idea从哪儿开始 我知道我需要在 Perl 中查找 SOAP 但大致就是这样
  • 在 Python 中使用 XPath 和 LXML

    我有一个 python 脚本 用于解析 XML 并将某些感兴趣的元素导出到 csv 文件中 我现在尝试更改脚本以允许根据条件过滤 XML 文件 等效的 XPath 查询将是 DC Events Confirmation contains T
  • “序言中不允许有内容”错误,但 XML 声明之前没有任何内容

    首先我已经详尽地检查了以下问题 这个问题似乎不是同一件事 SAXParseException 序言中不允许有内容 https stackoverflow com q 20551572 1571426 org xml sax SAXParse
  • 删除 XML 中的指定标签 (notepad++)

    我的 GPS 轨迹有一个 非常 大的 XML 文件 它是这样构建的
  • 如何创建序列化对象集 C#

    有多种类型 在特殊情况下可以以不同的方式配置 如何将它们序列化 Serializable XmlRoot RootXml Namespace public class RootXml object schemaVersion XmlElem
  • 编写XSL对xml数据执行一些操作

    如何在 products xsl 正文中编写 xsl 以获取数量 gt 10 的产品名称和状况 产品 xml
  • 如何重命名序列化对象列表后生成的 XML 属性

    我正在序列化对象列表List
  • 横向模式下视频视图不是全屏

    我正在使用用 xml 设计的视频视图 该视频在纵向模式下为全屏 但当切换到横向模式时 它会左对齐 并且宽度和高度都会换行 而不是全屏 我参考了这些 但仍然没有解决这个问题 全屏视频视图未居中 https stackoverflow com
  • 在 Powershell 中远程启动进程,在 Windows 中获取 %ERRORLEVEL%

    一些背景知识 我试图在测试开始时远程启动和停止一些性能计数器 然后在测试结束时停止它们 我是通过 Win2003 机器上的自动化测试框架执行此操作的 测试框架执行命令时无需启动控制台 某些被测系统正在运行 Win2008 我编写了脚本来根据
  • $Error 变量为 $Null 但 $_ 在 Catch 中包含错误

    我有 PS 模块 其中包含许多用于各个功能的脚本 还有一个 库 脚本 其中包含许多辅助函数 这些函数由模块中使用的函数调用 我们调用外部函数ReadWeb 并且它使用辅助函数ParseXML 本周我在内部助手中遇到了错误处理问题ParseX
  • 如何使用卸载路径卸载 MSI

    我正在尝试获取一组应用程序的卸载路径并卸载它们 到目前为止 我得到了卸载路径列表 但我很难真正卸载这些程序 到目前为止我的代码是 app msi1 msi2 msi3 msi4 Regpath HKLM Software Microsoft
  • powershell xml排序节点和替换子节点

    我正在尝试使用 powershell 和 xml 做一些非常简单的事情 但没有遇到任何麻烦 基本上我试图采用以下 xml 并按名称对机器元素进行排序 然后将它们放回到 XML 中 以便我可以保存回文件中 如果输出 new 对象 排序似乎有效
  • 无法索引空数组

    我正在使用一个模板 该模板根据服务器备份是否成功的条件设置单元格颜色 我有下面的代码 它不断抛出错误 无法索引到空数组 Cannot index into a null array At C Users admin Desktop new
  • 批量修改XML文件

    好的 所以我不太熟悉使用 For F 如果文件是静态的并且有一组可以跳过然后从中提取数据的行 我可以修改它 我目前正在尝试修改 XML 文件 该文件将具有不同数量的行 但始终具有以下内容
  • 在powershell中,在启动进程中设置亲和力

    在 powershell 中 我可以启动一个进程 app name app exe app arguments arg0 Start Process app name app arguments 我尝试设置亲和力 app Start Pro
  • XAMARIN - 添加来自 youtube 的视频

    我搜索如何从 youtube 添加视频的信息 例如 我想从一些 YouTube 链接添加视频 我认为它应该在网络视图中 但我需要一些详细信息 因为我找不到有关我的问题的任何信息 您可以使用 webview 播放 youtube 视频 str
  • 将 UTF-8 设置为 Heroku 中的默认字符串编码

    我需要在 Heroku 中将默认的 ruby 字符串编码更改为 UTF 8 由于某种原因它是 US ASCII heroku console Ruby console for myapp heroku com gt gt a encodin
  • XmlDocument Save 使文件保持打开状态

    我有一个简单的 C 函数 可以创建一个基本的 XML 文件并保存 private void CreateXMlFile string Filename string Name string Company XmlDocument doc n

随机推荐

  • 生成 Play 2 的 javascript 路由器的更简洁的方法

    目前我以相当详细的方式定义我的应用程序的 javascript 路由器 def javascriptRoutes Action implicit request gt import routes javascript Ok Routes j
  • 有没有办法立即检查目录是否正在使用?

    我想使用 Directory Move 移动目录及其所有子目录 不过 在此之前 我想检查该目录及其子目录中的任何文件和子文件是否正在被其他进程使用 然后 在移动之前 我想将目录锁定到其他进程 这样我就可以确保 Directory Move
  • 在 jQuery 对象数组上调用 show

    我有一个关于性能的小问题jQuery show 这个问题出现在 IE8 中 可能还有以下版本 但 IE8 是我感兴趣的 我有一个 jQuery 对象数组 我们称之为elements 我想向他们展示 所以我这样做了 for var i ele
  • WebClient.DownloadFileTaskAsync() 实际上永远不会超时吗?

    在异步之前的日子里 人们想知道如何设置超时WebClient答案很简单 就是扩展基类并覆盖GetWebRequest 并在那里设置超时 protected override WebRequest GetWebRequest Uri addr
  • 在 Excel VBA 宏中使用 Google 翻译

    各位 多年来 我一直在我的 Excel 宏之一中使用以下函数来帮助我将照片标题从英语撰写为法语 今天上午它开始抛出一个错误 该错误指向 Send下面代码中的命令 Public Function getGoogleTranslation st
  • 从 MySQL 表中选择值是数组的行?

    我有一个包含 ID 列表的表 我使用查询来选择它 然后将其作为数组获取 我知道如何执行此操作 然后我想从另一个表中选择行 其中 ID 位于之前获取的数组中 我该怎么做 提前致谢 你很可能想做一个WHERE field IN 类型查询 它本质
  • neo4j中如何删除多个节点

    如何在neo4j中删除多个节点 不是全部 我有这个查询MATCH n where n name IS NULL delete n 它返回多个节点 我想删除所有这些节点 所有节点 这些节点是错误创建的 这就是为什么变成空 我面临的错误是 ja
  • Rails 模型范围内的关联数据

    我有一个名为Post 博客文章 和一个名为Category 每个帖子belongs to一个类别 每个类别都有一个名为retainer指定帖子 过期 之前的时间量 例如movies category retainer 30 days 我想做
  • 在 Python 中迭代嵌套字典

    我的字典的结构如下 stockData AAPL beta 1 01833975315094 company name Apple dividend 1 9341673320912078 total 300 GOOG beta 1 0183
  • 在 Verilog 设计中产生时钟故障

    我正在使用 Verilog 设计芯片 我有一个 3 位计数器 我希望当计数器处于第 8 次循环时 应该有一个时钟故障 之后就可以正常工作了 在 Verilog 设计中产生时钟故障的可能方法是什么 在时钟信号上注入毛刺的一种方法是使用forc
  • 要复制到 Windows 共享 (SMB) 的 Ant 任务

    是否有 ant 任务 类似于 ftp 或 scp 任务 允许我将一组文件复制到 Windows smb 共享 编辑 我必须为此使用 jcifs 创建一个任务 如果有人需要 这里是代码 取决于 jcifs 和 apache ioutils i
  • 使用内置 std::sort 函数对 C++ 中的二维数组进行排序

    我有一个形式的矩阵pMat M N where M and N是可变的 因此是来自用户的输入 我想使用内置的对二维数组的元素进行排序std sort功能 例如 考虑以下数组 5 9 6 8 1 3 7 2 4 它应该输出为 1 2 3 4
  • 用于上采样的 PCM 算法

    我有 8k16 位 pcm 音频 我想将其上采样到 16k16 位 我必须手动执行此操作 有人可以告诉我线性插值的算法吗 我应该在每两个字节之间插入吗 另外 当我上采样时 我必须对 wav 标头进行更改 我应该更改什么 正如其他人提到的 线
  • 如何仅合并特定表格行的两个单元格? (文档、应用程序脚本)

    I am trying to create a table in a Doc file using Google Appsscript The last row should only consist of one cell 但我能得到的就
  • 如何使用 Jquery 更改选项值?

    我正在寻找一种在用户单击链接时更改选择标记的选项值的方法 例如我有一个选择选项 html
  • 如何在 Raspbian Jessie 上安装 Python 3.5

    我需要在 Rasbian Raspberry Pi 的 Debian 上安装 Python 3 5 目前仅支持 3 4 版本 对于我想要编译的源 我必须安装 sudo apt get install y python3 python emp
  • Sails.js v 10.2 缺少 Express 应用程序

    升级后如何从 Sails 全局对象访问 Express 应用程序实例 在 sails 0 9x 中 我们可以通过以下方式访问 Express 应用程序实例 sails express app 升级到0 10后 快递功能缺失 我们如何调用该应
  • 如何在OpenCV 3.0或更高版本中使用estimateRigidTransform,还有其他选择吗?

    我想使用OpenCV的estimateRigidTransform函数 但它抛出一个错误 AttributeError Traceback 最近调用 最后 在 30 31 求变换矩阵 gt 32 m cv2 estimateRigidTra
  • 如何在 Python 模块中正确使用相对或绝对导入? [复制]

    这个问题在这里已经有答案了 在 Python 中使用相对导入有一个缺点 您将无法再作为独立运行模块 因为您将收到异常 ValueError 尝试在非包中进行相对导入 Code test py just a sample file impor
  • 使用 PowerShell 编辑 XML 和“文件格式”错误

    我正在使用 Codeplex 中的 HyperV 模块从 2008R2 Hyper V 服务器执行 仅配置 导出 为了导入另一台 HyperV 服务器上的配置 我需要编辑 EXP 文件中 CopyVMStorage 的值 该文件是一个 XM