使用powershell中的变量存在xml节点

时间:2015-02-19 17:03:42

标签: xml powershell xpath

我正在尝试确定我的powershell脚本中是否存在具有特定DisplayName的邮箱(请参阅下面的示例xml)。如果我对值进行硬编码,我可以找到节点,但是我无法将此值作为参数传递。我尝试了各种使用单引号和双引号的方法,但没有一种方法是正确的。

最终目标是创建具有相同DisplayName的邮箱节点(如果不存在)。可能有0个或更多邮箱节点。

以下是xml示例:

<Profiler>
  <Mailboxes>
    <Mailbox>
      <DisplayName>django</DisplayName>
    </Mailbox>
  </Mailboxes>
</Profiler>

这是一段代码,如果节点不存在,我想要执行:

$newMailbox = $xmlData.CreateElement("Mailbox")
$newDisplayName = $xmlData.CreateElement("DisplayName")
$newDisplayNameText = $xmlData.CreateTextNode($mailboxName)
$newDisplayName.AppendChild($newDisplayNameText)
$newMailbox.AppendChild($newDisplayName)
$mailboxes = $xmlData.SelectSingleNode("./Profiler/Mailboxes")
$mailboxes.AppendChild($newMailbox)

这段代码有效:

$users = $xmlData.SelectNodes("./Profiler/Mailboxes/Mailbox/DisplayName[text() = 'django']")
write-host $users.count
  

脚本输出:1

这不是:

$mailboxName = "django"
$users = $xmlData.SelectNodes("./Profiler/Mailboxes/Mailbox/DisplayName[text() = $mailboxName]")
write-host $users.count 
  

脚本输出:0

我也试过这个:

$mailboxName = "django"
$users= $xmlData.SelectNodes("./Profiler/Mailboxes/Mailbox[DisplayName = $mailbox]")
  

脚本输出:使用“1”参数调用“SelectNodes”的异常:“表达式必须求值为节点集。”

1 个答案:

答案 0 :(得分:1)

我想你想要$users = $xmlData.SelectNodes("./Profiler/Mailboxes/Mailbox/DisplayName[. = '$mailbox']")