Powershell-比较两个数组,并将额外的数据从第二个数组写入第一个数组



每个月我都会从我们的电话供应商那里收到一份报告,其中包含所有成本的完整规格。在收到的数据中,我不想为每个电话用户创建一个关于电话使用情况的报告。我在Excell中解决了这个问题,但想用Powershell制作一个更好的解决方案。但是问题。。。

其中一列包含订阅、调用类型等数据。该列中总共有大约100种不同类型的数据,但我想将它们分为4个不同的类别。

我有一个列表,其中包含另一个文件中的所有类型的数据和类别,但我找不到一种方法来检查第一个列表中的数据,将它们与第二个列表进行比较,并将类别作为额外数据写回第一个数组。在Excel中,我使用了查找函数。

下面是我想要的示例:我有一些数据:

$data1 = @(
[pscustomobject]@{No='1';Name='Joe';Service='Subscription 1';Price='5'}
[pscustomobject]@{No='2';Name='Sue';Service='Subscription 2';Price='4'}
[pscustomobject]@{No='3';Name='Joe';Service='Call Price 1';Price='0,1'}
[pscustomobject]@{No='4';Name='Sue';Service='Call Price 2';Price='0,2'}
[pscustomobject]@{No='5';Name='Sue';Service='Call Price 1';Price='0,1'}
[pscustomobject]@{No='6';Name='Joe';Service='Call Price 2';Price='0,2'})

以及类别列表:

$data2 = @(
[pscustomobject]@{Service='Subscription 1';Overview='Subscriptions'}
[pscustomobject]@{Service='Subscription 2';Overview='Subscriptions'}
[pscustomobject]@{Service='Call Price 1';Overview='Calls'}
[pscustomobject]@{Service='Call Price 2';Overview='Calls'}
[pscustomobject]@{Service='Call Price 1';Overview='Calls'}
[pscustomobject]@{Service='Call Price 2';Overview='Calls'})

我想要一个通过服务将其组合在一起的输出:

No       : 1
Name     : Joe
Service  : Subscription 1
Overview : Subscriptions
Price    : 5
No       : 2
Name     : Sue
Service  : Subscription 2
Overview : Subscriptions
Price    : 4
No       : 3
Name     : Joe
Service  : Call Price 1
Overview : Calls
Price    : 0,1
No       : 3
Name     : Sue
Service  : Call Price 2
Overview : Calls
Price    : 0,2
No       : 3
Name     : Sue
Service  : Call Price 1
Overview : Calls
Price    : 0,1
No       : 3
Name     : Joe
Service  : Call Price 2
Overview : Calls
Price    : 0,2

谢谢你的帮助!

$data2:中的数据创建字典开始

$serviceTypes = @{}
$data2 |ForEach-Object { $serviceType[$_.Service] = $_.Overview }

现在,您可以使用Select-Object通过一次查找来解析服务类别:

$usageData = $data1 |Select *,@{Name='Overview';Expression={$serviceType[$_.Service]}}

最新更新