使用PowerShell

时间:2015-12-20 01:13:21

标签: xml powershell xpath

我有一个XML模式,我正在尝试将新节点插入:

<clusters>
  <cluster>
    <name>
      cfcluster
    </name>
    <port>
      45564
    </port>
    <sessionreplication>
      true
    </sessionreplication>
    <server>
      cfusion1
    </server>
    <server>
      cfusion2
    </server>
    <stickysession>
      true
    </stickysession>
  </cluster>
</clusters>

我正在尝试编写一个具有新服务器值的脚本,将针对现有服务器进行检查,然后在现有服务器之后插入新服务器(如果找不到)。比方说,我有一个新的服务器值cfusion3,我希望我的新输出最终像这样:

<clusters>
  <cluster>
    <name>
      cfcluster
    </name>
    <port>
      45564
    </port>
    <sessionreplication>
      true
    </sessionreplication>
    <server>
      cfusion1
    </server>
    <server>
      cfusion2
    </server>
    <server>
      cfusion3
    </server>
    <stickysession>
      true
    </stickysession>
  </cluster>
</clusters>

假设我将$ xml存储在$ clusterData中并且我要插入的新服务器存储在$ cfInstance.name中,我以为我会使用类似这样的东西,但是无法让它工作...... < / p>

if (-not ($clusterData.clusters.cluster.server -match $cfInstance.name)) {
    $oldServer = ($clusterData | Select-Xml '/clusters/cluster/server').get_node()
    $newServer = $clusterData.CreateElement("server")
    $newServer.InnerText = $cfInstance.name
    $clusterData.InsertAfter($newServer, $oldServer)
}

我很确定问题是$oldServer正在获取所有<server>个节点,而我不确定如何修改xpath以获得一个节点。我试过了:
Select-Xml -Xml $clusterData -XPath "clusters/cluster/server[text()='cfusion2']"
但这不会返回任何东西。有什么建议吗?

0 个答案:

没有答案