我在PowerShell中解析XML文件,但遇到了一个我无法找到解决方案的问题。
以下是xml文件的内容:
<hostcount>2</hostcount>
<hostconfig>
<hostname1>host1.fqdn.local</hostname1>
<hostroot1>root</hostroot1>
<hostpassword1>p@ssw0rd</hostpassword1>
<hostname2>host2.fqdn.local</hostname2>
<hostroot2>root</hostroot2>
<hostpassword2>p@ssw0rd</hostpassword2>
</hostconfig>
我希望能够将其转换为PowerShell中的变量。我正在解析XML文件,但是当我尝试将XML复制到变量中时,我得到一个错误。
以下是我的powershell脚本的片段:
$i = 1
$host1 = $xml.hostconfig.hostname$i
现在,我知道上面的内容是错误的,但我如何让$i
坚持下去呢?理想情况下,我想循环遍历XML并获取所有主机信息。
答案 0 :(得分:1)
据我所知,您的XML文件格式不正确。你不能尝试以下方法:
$xml = @"
<Computers>
<hostcount>2</hostcount>
<hostconfig>
<host>
<hostname>host1.fqdn.local</hostname>
<hostroot>root2</hostroot>
<hostpassword>p@ssw0rd2</hostpassword>
</host>
<host>
<hostname>host2.fqdn.local</hostname>
<hostroot>root2</hostroot>
<hostpassword>p@ssw0rd2</hostpassword>
</host>
</hostconfig>
</Computers>
"@
$a = [XML]$xml
$hostcount1 = $a.Computers.hostcount
$hostcount2 = $a.Computers.hostconfig.ChildNodes.count
$host1 = $a.Computers.hostconfig.ChildNodes[0].hostname
答案 1 :(得分:0)
我强烈建议您遵循@JPBlanc的建议。将对象详细信息指定为子节点
<host>
<hostname>host1.fqdn.local</hostname>
<hostroot>root2</hostroot>
<hostpassword>p@ssw0rd2</hostpassword>
</host>
<host>
<hostname>host2.fqdn.local</hostname>
<hostroot>root2</hostroot>
<hostpassword>p@ssw0rd2</hostpassword>
</host>
或作为属性
<host hostname='host1.fqdn.local'
hostroot='root2'
hostpassword='p@ssw0rd2' />
<host hostname='host2.fqdn.local'
hostroot='root2'
hostpassword='p@ssw0rd2' />
表示对象类的父节点的比编号每个节点将其归于特定对象更有意义。
但是,如果由于某种原因您无法更改XML格式,则可以访问带编号的节点,如下所示:
$i = 1
$xml.hostconfig."hostname$i"