使用Powershell解析XML以查找特定的ACD代理并列出该ACD代理的所有信息

时间:2015-08-20 20:31:11

标签: xml parsing powershell

我的电话系统包含一个包含ACD代理的XML文件,需要提取有关特定代理的信息并获取该代理的所有相关信息。

XML是这样的:

Negotiate

我给脚本输入一个ACD id #like id =" 10003",我需要能够得到这样的输出(我得到名字/ ACD#/ queue / penalty /队列/罚球/队列/罚球/队列/罚球/队列/罚球)像这样:

<?xml version="1.0" encoding="UTF-8"?>
<UserMgntConfig version="1.1">
  <Agents digits="5">
    <ACDAgent createdUserId="40" groupsId="" id="10003" usersId="4">
      <name>Smith, J</name>
      <IsVoiceMailUser>false</IsVoiceMailUser>
      <queues>
        <queue dynamic="false" id="6001" penalty="1"/>
        <queue dynamic="false" id="6002" penalty="1"/>
        <queue dynamic="false" id="6003" penalty="2"/>
        <queue dynamic="false" id="6004" penalty="2"/>
        <queue dynamic="false" id="6005" penalty="3"/>
      </queues>
    </ACDAgent>

或按每个输出行的一个参数的顺序输出。 到目前为止,我得到了以下内容。

在PS编辑器中输入:

Smith, J;10003;6001;1;6002;1;6003;2;6004;3;6005;3

输出:

[xml]$agent = Get-Content .\UserMgntCfg.xml
$agent.UserMgntConfig.agents.ACDAgent[0].name
$agent.UserMgntConfig.agents.ACDAgent[0].id
$agent.UserMgntConfig.agents.ACDAgent[0].queues.queue

这对我有用,但输入是数组[0]的索引,但我需要能够通过代理ID来获取结果,如[10193]。 通过省略队列/队列节点,我可以使用......

Dorman, J
10003
dynamic        id         penalty
false          6001       1
false          6002       1
false          6003       2
false          6004       2
false          6005       3

...获取特定代理但不返回我需要知道的队列/队列信息。

我是XML和Powershell的新手,但学习。任何想法都会有很大帮助,我会进一步研究改进这个过程。最终结果是我需要输入代理,然后为该代理测试多个电话系统,以查看系统是否全部配置相同。这项调查是实现这一目标的第一步。提前感谢任何想法,

1 个答案:

答案 0 :(得分:1)

使用XPath expression选择具有特定ID的代理:

[xml]$xml = Get-Content '.\UserMgntCfg.xml'

$id = 10003
$agent = $xml.SelectSingleNode("//ACDAgent[@id='$id']")

将队列ID和惩罚提取到数组:

$queues = $agent.queues.queue | % { $_.id; $_.penalty }

然后将它们加在一起:

'{0};{1};{2}' -f $agent.name, $id, ($queues -join ';')