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