我正试图整理最近一份关于PC用户似乎没有使用的报告,为此我得到了一个名为“报告”的CSV文件和一个名为“数据”的CVS文件。
报告和数据仅共享1列,即用户全名,如何获得既提供用户全名又提供仅来自报告的PC的结果?
到目前为止,我有下面的代码获得用户的全名,但我不知道如何获得设备
$report = Import-Csv "C:\Temp\\report.CSV" -Delimiter ";"
$data = Import-Csv "C:\Temp\\data.CSV" -Delimiter ";"
$UserOutput = @()
ForEach ($name in $report)
{
$userMatch = $data | where {$_.FullName -like $name.FullName}
If($userMatch)
{
$UserOutput += New-Object PsObject -Property @{UserName =$name.FullName;Device=$userMatch.Device}
}
else
{
$UserOutput += New-Object PsObject -Property @{UserName =$name.FullName;Device ="NA"}
}
}
$UserOutput | ft
这给出了一个很好的列表,但我找不到设备,所以它最终看起来像这样
设备用户名
安德斯·阿达尔· Json
安德烈·科瓦奇
安娜·丹克
3条答案
按热度按时间wz3gfoph1#
可以使用
Group-Object -AsHashtable
关联两个对象数组上的FullName
属性。这假定关联时属性值完全匹配。tez616oj2#
假设您提供的详细信息在两个csv文件中都可用,这里是一个示例。
ep6jt1vc3#
可接受的答案看起来假设CSV上的条目计数是一对一的匹配,因为它有一个比较相同CSV数组元素编号的循环。
在您的描述中,您提到Report.csv是不常用PC的列表,Data.csv是“All PC”列表。如果您的条目计数不是一对一,可能需要两个循环,如下所示。