繁体   English   中英

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

[英]xml node exists using variables in powershell

我试图确定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”:“表达式必须计算为节点集。”

我认为您需要$users = $xmlData.SelectNodes("./Profiler/Mailboxes/Mailbox/DisplayName[. = '$mailbox']")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM