Xml 奇怪的行为->.GetEnumerator()|.Reset()->正在寻找解决方法

Xml 奇怪的行为->.GetEnumerator()|.Reset()->正在寻找解决方法,xml,powershell,enumerator,Xml,Powershell,Enumerator,我在PowerShell中使用一个简单的XML文件,由于我使用了GetEnumerator方法,所以在使用脚本时看到一些奇怪的事情。使用GetEnumerator方法在对象中保存某些内容时,只能使用该对象一次。之后,我必须重新设置以再次使用它 我想摆脱这种行为。下面是一个示例脚本,它基本上显示了我如何在脚本中使用它。在函数中的实际脚本中,我经常使用变量$ControlObject,每次都必须重置它 如何以简单的方式防止这种情况 $XMLTargetPath=连接路径-Path$PSScriptR

我在PowerShell中使用一个简单的XML文件,由于我使用了GetEnumerator方法,所以在使用脚本时看到一些奇怪的事情。使用GetEnumerator方法在对象中保存某些内容时,只能使用该对象一次。之后,我必须重新设置以再次使用它

我想摆脱这种行为。下面是一个示例脚本,它基本上显示了我如何在脚本中使用它。在函数中的实际脚本中,我经常使用变量$ControlObject,每次都必须重置它

如何以简单的方式防止这种情况

$XMLTargetPath=连接路径-Path$PSScriptRoot-ChildPath XMLConfig.xml 将XML保存在文件中,以便于快速复制 $XMLContentForFile=[xml]@ 布拉布拉 1. 一月 2. 二月 @ $XMLContentForFile.Save$XMLTargetPath 函数MyFunction{ Param [ParameterMandatory=$true,位置=0] $ControlObject $ControlObject输出对象 $ControlObject问题-我没有得到任何输出。。。 我需要重新设置以再次输出对象。。。 $ControlObject.Reset $ControlObject } [xml]$xml=获取内容-路径$XMLTargetPath 将XML节点动态设置传递到函数中 MyFunction-ControlObject$xml.OuterNode.DynamicSettings.GetEnumerator
我认为您误解了枚举器和PowerShell默认输出的工作方式。用于输出处理的PowerShell:

它调用引擎以获取提示,但随后显示并收集用户输入。然后,它接受该输入,连接| Out Default并将其提交给引擎执行…是的,在覆盖下,通过控制台主机输入的每个命令都通过管道传输到默认输出

但是,管道会自动展开枚举数,否则它将无法显示枚举或可枚举集合的元素。因此,仅回显变量本质上与在上循环相同:

输出操作完成后,枚举数位于枚举的末尾,因此需要先将其移到开头,然后才能再次枚举元素。重置就是这样做的

为什么管道不自动重置枚举?我不知道,但可能不会产生无限循环

一句话:你不能既有蛋糕又吃。枚举需要展开,以便可以显示元素,并且由于枚举不是自动重置的,因此您需要自己进行重置,然后才能再次枚举元素

如果只需要选定节点的嵌套元素,则可能应该使用属性而不是枚举数

MyFunction -ControlObject $xml.OuterNode.DynamicSettings.ChildNodes

不能繁殖的。两次输出两个项目,用于me@MathiasR.JessenOP希望输出出现三次:两次在重置之前,一次在重置之后。我不能将枚举的内容保存在一个对象中以获取普通对象的beaviour吗?如何以一种简单的方式?@Walhalla如果你不需要枚举器,就干脆不使用枚举器怎么样$您实际需要的是xml.OuterNode.DynamicSettings.ChildNodes。我需要进一步测试它,但我认为$xml.OuterNode.DynamicSettings.ChildNodes是答案-如果您将此作为答案发布,可能需要对.ChildNotes和.GetEnumerator进行比较/描述,我会将其标记为答案!多谢各位
MyFunction -ControlObject $xml.OuterNode.DynamicSettings.ChildNodes