我有一个返回以下信息的脚本
Analog Phones IP Phones Location
------------- --------- --------
0 883 Site1
413 0 Site1
0 4 Site1
0 258 Site2
9 75 Site2
183 0 Site2
此信息存储在数组 $arrayX 中
我想弄清楚如何让输出显示
Analog Phones IP Phones Location
------------- --------- --------
413 887 Site1
192 333 Site2
馈入数组的数据不是以这种方式呈现的;有没有人对如何完成这样的事情有任何想法?我可以发布整个脚本,但它现在是 java、axl 和 powershell 的混乱。
脚本中有一点数据看起来像这样
Analog Phones IP Phones Location
------------- --------- --------
413 0 Site1-AGW-DP
0 883 Site1-PHONES-DP
0 4 Site1-PHSRST-DP
正在使用的 XML 文件是从 java axl 程序输出的。其中之一的结果如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<axl:executeSQLQueryResponse xmlns:axl="http://www.cisco.com/AXL/API/6.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" sequence="1394831301468">
<return>
<row>
<analog_phones>0</analog_phones>
<ip_phones>47</ip_phones>
<devicepool>Site20-PHONES-DP</devicepool>
</row>
<row>
<analog_phones>533</analog_phones>
<ip_phones>0</ip_phones>
<devicepool>Site20-AGW-DP</devicepool>
</row>
<row>
<analog_phones>1</analog_phones>
<ip_phones>689</ip_phones>
<devicepool>Site20-PHSRST-DP</devicepool>
</row>
</return>
</axl:executeSQLQueryResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
在 java 位之后启动的 Powershell 脚本
$files = (Get-ChildItem .\*out.xml).name
foreach ($file in $files){
[xml]$xmlfiles = gc $file
$finalxml += $xmlfiles.envelope.body.executeSQLQueryResponse.return.row
Remove-Item $pwd\$file
}
$outarray = @()
$sitelist = import-csv sites.csv
foreach($item in $finalxml){
if(!$item.devicepool){$sed="BLANK"}
else{$sed=($item.devicepool).substring(0,4)}
$location=($sitelist | where-object {$_.prefix -eq $sed}).Facility
if(!$location){$location=$sed}
$outarray+=New-object psobject -property @{
'Analog Phones' = $item.analog_phones
'IP Phones' = $item.ip_phones
'Location' = $location
}
}
$outarray | Sort-Object 'Analog Phones','IP PHones' -unique | sort-object Location | select-object 'Analog Phones','IP Phones',Location |export-csv $csvout
从外观上看,您是在尝试将所有结果合并到每个站点的单个条目中吗?例如 - 每个位置的模拟电话总数和 IP 电话总数。
如果是这种情况,您应该能够遍历该数组。合计每个站点的模拟电话和 IP 电话,然后使用这些值填充新数组。
如果您正在寻找一些代码,我们必须知道如何构造数组来构建逻辑。
像这样的东西应该工作:
$result
输出是:这是逻辑:
PS:我不是Powershell Guru,所以我认为
getIndex
可以改进。但是,根据您的源代码,它对我有用。希望它会有所帮助!
编辑
这是我将代码集成到您的代码中的方式:
首先,我创建了
$outarray
像你一样的东西(我认为),除了我使用了硬编码值(不解析 xml 文件):从这一点来看,我的
$outarray
样子是这样的:然后我在你的
export-csv
命令之后添加了我的代码:编辑 2
我发现您的实际代码存在问题:数字被解释为字符串,因此无法正确计算。您必须将它们转换为整数: