2

我有一个类似于下面的 xml 文件。

<Parameters>
  <Parameter IsEncrypted="False">
    <ParameterName>pRdGpInstallOptions</ParameterName>
    <ParameterValue>Custom</ParameterValue>
  </Parameter>
  <Parameter IsEncrypted="False">
    <ParameterName>pRdAccept</ParameterName>
    <ParameterValue>true</ParameterValue>
  </Parameter>
  <Parameter IsEncrypted="False">
    <ParameterName>pCboEditSQLServer</ParameterName>
    <ParameterValue>MachineName\SQLEXPRESS</ParameterValue>
  </Parameter>
</Parameters>

我在这里只复制了几个节点。实际上,真实文件可能有数百个参数节点。

我们不能对索引进行硬编码,因为它可能以任何顺序出现。我正在尝试检索与 Parameter Name 关联的 SQLinstance name 参数值"pCboEditSQLServer"

我想使用 powershell 检索这个值。如何解析这个动态 xml 文件?

4

2 回答 2

9
$sql = $xml.Parameters.Parameter | Where-Object {$_.ParameterName -eq 'pCboEditSQLServer'}
$sql.ParameterValue

MachineName\SQLEXPRESS  

Here's another option (should be faster) using xpath:

$path = "/Parameters/Parameter[ParameterName='pCboEditSQLServer']/ParameterValue"
$xml.SelectSingleNode($path).'#text'

And there's the Select-Xml cmdlet:

$sql = $xml | Select-Xml -XPath $path 
$sql.Node.'#text'
于 2012-07-03T11:44:35.640 回答
3

读取 XML:

$xml = [xml](gc test.xml -Encoding utf8)

并使用对象模型检索数据:

$xml.Parameters.Parameter | ? { $_.ParameterName -eq "pCboEditSQLServer" } | Select-Object -Property ParameterName, ParameterValue

于 2012-07-03T11:48:40.037 回答