Начните с переупорядочения данных так, чтобы все строки, принадлежащие одному компьютеру, были сгруппированы:
$Computers = $profiles |Group-Object 'Device Name' |ForEach-Object {
[pscustomobject]@{
Name = $_.Name
OS = $_.Group[0].OS
Software = $_.Group |ForEach-Object {
"$($_.'Product Name') $($_.'Product Version')"
} |Sort-Object
}
}
Теперь, когда список Software
, установленный на каждом компьютере, представляет собой отсортированный список строк превращение списка в одну строку с -join
позволит нам сравнивать и группировать по этому, теперь намного ближе к вашему намеченному выводу:
PS C:\> $Computers |Group-Object OS,{$_.Software -join ', '} -NoElement |Sort Count -Descending |Format-Table -AutoSize
Count Name
----- ----
2 Windows 10, PowerBI 2.72.5556, Visio 16.0.11929, WebEx 40.1.8.5
1 Windows 10, PowerBI 2.72.5556, Visio 16.0.11000, WebEx 40.1.8.5
1 Windows 7, Visio 16.0.11000, WebEx 38.1.6.3
1 Windows 7, Visio 16.0.11929