【问题标题】:Import xml elements into powershell variables将 xml 元素导入到 powershell 变量中
【发布时间】:2017-12-26 13:18:28
【问题描述】:

我已经弄清楚如何使用变量之前的[xml] 标记和Get-Content 将 xml 文件导入到 Powershell 变量中,但是从新的 xml 格式变量一次填充 Powershell 中的每个变量是辛苦了。

$variable = $xml.vars.Linux.variable1
$variable2 = $xml.vars.Linux.variable2

...等等。

是否有更短/更快的方法来导入该 xml 文件并设置与节点名称匹配的 Powershell 变量并用关联的节点值填充这些变量?所以我不必专门用对应的命名 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>

谢谢!

【问题讨论】:

  • 您希望变量名称基于元素名称吗?还是有其他关系?
  • 没错!使脚本编写更容易,但将值放在单独的文件中。

标签: xml powershell


【解决方案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}

【讨论】:

  • 玩这个,这似乎很接近......虽然循环必须从“variable.linux”下面的xml元素中获取新Powershell变量的名称......然后填充该变量与 xml 元素的值。看来我目前必须专门调出此循环中的每个 xml 元素。
【解决方案2】:

您可以使用 xpath 在 Powershell 中非常轻松地访问 xml 节点。示例:

$myNode = $xmlDoc.SelectSingleNode("//Linux")

您可以从那里将其他元素附加到节点上。

首先创建一个新元素

$child = $xmlDoc.CreateElement("NewElementName")

第二次将值添加到新的子元素

$Child.InnerXML = "ValueHere"

然后将子元素附加到您选择的节点上

$myNode.AppendChild($child)

这可以很容易地在一个循环中完成,您将直接使用 xml 对象而不是对其进行转换。

【讨论】:

    【解决方案3】:

    您可以像这样为特定节点下的每个元素创建一个变量:

    $xml.vars.Linux.ChildNodes | %{ New-Variable -Name $_.Name -Value $_.InnerText -PassThru}
    

    您可以移除-PassThru 开关以避免将变量输出到管道中。

    【讨论】:

    • 啊,就是这样!谢谢!我还添加了-force 开关以覆盖命名变量中的任何可能值。
    猜你喜欢
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多