将xml元素导入powershell变量

时间:2017-07-20 17:34:42

标签: xml powershell

我已经弄清楚如何使用变量[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>

谢谢!

3 个答案:

答案 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对象而不是转换它。