我已经弄清楚如何使用变量[xml]
之前的Get-Content
标记将xml文件导入Powershell变量,但是从新的xml格式填充Powershell中的每个变量一次变量是艰苦的。
$variable = $xml.vars.Linux.variable1
$variable2 = $xml.vars.Linux.variable2
......等等。
是否有更短/更快的方法来导入该xml文件并设置与节点名称匹配的Powershell变量并使用关联的Node值填充这些变量?因此,我不必专门用它的相应命名的xml节点填充每个Powershell值,我可以使用Powershell变量而不用代码行填充它们吗?
我怀疑我可能需要某种循环...当前的xml结构是3层,第二层节点的类别名称,然后是其中的节点的变量名称。例如:
<vars>
<Windows>
<Hostname>Contoso</Hostname>
<IP_Address>192.168.1.1</IP_Address>
</Windows>
<Linux>
<variable1>Yup</variable1>
<variable2>Yessir</variable2>
</Linux>
</vars>
谢谢!
答案 0 :(得分:2)
您可以为特定节点下的每个元素创建一个变量,如下所示:
$xml.vars.Linux.ChildNodes | %{ New-Variable -Name $_.Name -Value $_.InnerText -PassThru}
您可以删除-PassThru
开关,以避免将变量输出到管道上。
答案 1 :(得分:1)
目标是将xml数据转换为您可以在别处调用的powershell对象吗? 这样的事情对你有用吗?
foreach ($var in $variable.linux){
$properties = @{'variable1'=$var.variable1
'variable2'=$var.variable2}
$obj = New-Object -TypeName PSObject -Property $properties -ErrorAction Stop
Write-Output $obj}
答案 2 :(得分:1)
您可以使用xpath在Powershell中轻松访问xml节点。示例:
$myNode = $xmlDoc.SelectSingleNode("//Linux")
从那里,您可以在节点上附加其他元素。
首先创建一个新元素
$child = $xmlDoc.CreateElement("NewElementName")
第二步将值添加到新子元素
$Child.InnerXML = "ValueHere"
然后将子元素附加到您选择的节点
$myNode.AppendChild($child)
这可以在一个循环中轻松完成,您将直接使用xml对象而不是转换它。