Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
附加具有不同值的克隆XML节点-Powershell_Xml_Powershell_Usmt - Fatal编程技术网

附加具有不同值的克隆XML节点-Powershell

附加具有不同值的克隆XML节点-Powershell,xml,powershell,usmt,Xml,Powershell,Usmt,我有一个XML文件,格式如下: 显示名称 无条件排除驱动器 某物 我需要根据某个值克隆标记几次,可能是4-5次 我正在尝试使用以下代码,但无法追加所有值,只能追加最终值 奇怪的是没有错误 $something = @(1, 2, 3, 4, 5, 5) foreach($num in $something) { $drivething = "D:" $xml = [xml](Get-Content -Path "C:\Temp\referenc

我有一个XML文件,格式如下:


显示名称
无条件排除驱动器
某物
我需要根据某个值克隆
标记几次,可能是4-5次

我正在尝试使用以下代码,但无法追加所有值,只能追加最终值

奇怪的是没有错误

$something = @(1, 2, 3, 4, 5, 5)

foreach($num in $something) {
    $drivething = "D:"
    $xml = [xml](Get-Content -Path "C:\Temp\referenceXml.xml")
    $element = $xml.migration.component.clone()
    $xml.DocumentElement.AppendChild($element)
}

$xml.Save("C:\temp\newXML.xml")
预期输出为:


显示名称
无条件排除驱动器
某物
无条件排除驱动器
1.
无条件排除驱动器
2.
但我得到的只是:


显示名称
无条件排除驱动器
某物
无条件排除驱动器
5.

我不知道我错过了什么。非常感谢您的帮助。提前感谢

您当前为每个循环迭代重新加载XML,因此只有最后一个循环迭代才会产生效果。XML应该在循环之前只加载一次。还可以将
$xml.migration.component
保存在一个变量中,这样即使添加了更多元素(它成为一个数组),您也可以始终以相同的方式访问它


另一方面,我用
$xml.Load()
替换了
Get Content
,这可以更好地处理xml编码。

谢谢你的建议,我确实尝试过,但问题是它根本不起作用,因为在第一次迭代中,它会抛出错误,因为它还不是数组,因此,它将抛出一个错误。非常感谢您的解释和解决方案。我只是让它做了一个工作,将组件转换成数组。但是这个解决方案要好得多,所以我们将使用这种逻辑。再次,非常感谢
$something = @(1, 2, 3, 4, 5, 5)

$xml = [xml]::new()
$xml.Load("C:\Temp\referenceXml.xml")

$component = $xml.migration.component

foreach($num in $something) {
    $drivething = "D:"
    $element = $component.clone()
    $xml.DocumentElement.AppendChild($element)
}

$xml.Save("C:\temp\newXML.xml")