PowerShell - XML - 将多个元素附加到远程桌面连接管理器文件中的节点

PowerShell - XML - Append Multiple Elements to Node in Remote Desktop Connection Manager File

$xmlFrag = $NewXMLNode.innerXml

Cannot convert argument "0", with value: 
"<removed for ease of reading>" value of type "System.String" to type "System.Xml.XmlNode"."
At line:1 char:1
+ $node.AppendChild($xmlFrag)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument

有人知道如何修复此错误吗?或者是否有比我正在使用的方法更好的在 XML 文件中工作的方法?

使用这个:$xmlFrag.InnerXml = $NewXMLNode.innerXml

而不是您原来的作业 $xmlFrag = $NewXMLNode.innerXml

您的原始作业将 xml 片段替换为字符串,因此当您尝试将 appendchild 方法与字符串(而不是片段)一起使用时,它会失败。

进一步说明

您可以通过查看以下独立演示来了解结果分配类型的差异。

[xml]$NewXMLNode = "<xml></xml>"

#create document fragment to prevent error regarding no root node
$xmlFrag = $xDoc.CreateDocumentFragment()
Write-Host 'Wiping the fragment and assigning a string' -ForegroundColor Yellow
$xmlFrag = $NewXMLNode.innerXml 
$xmlFrag.GetType() | out-string | Write-Host

$xmlFrag = $xDoc.CreateDocumentFragment()
Write-Host 'Proper assignment of the node xml to the newly created fragment' -ForegroundColor Green
$xmlFrag.innerXml = $NewXMLNode.innerXml
$xmlFrag.GetType() | out-string | Write-Host

第一个例子是你做的作业。由于您无法为 appendchild 提供字符串,因此它失败了。第二个任务是你需要做的。 XmlDocumentFragment 类型被正确保留,与 appendchild 方法一起使用时成功。