Группировка по общности - PullRequest
2 голосов
/ 08 марта 2020

Попытка выяснить, как получить общие конфигурации (установленный продукт и версия) для набора данных машин.

Данные структурированы следующим образом:

Device Name     Product Name    Product Version     OS
Computer 1      Visio           16.0.11929          Windows 10
Computer 2      Visio           16.0.11929          Windows 10
Computer 3      Visio           16.0.11000          Windows 7
Computer 4      Visio           16.0.11929          Windows 7
Computer 5      Visio           16.0.11000          Windows 10
Computer 1      PowerBI         2.72.5556           Windows 10
Computer 2      PowerBI         2.72.5556           Windows 10
Computer 5      PowerBI         2.72.5556           Windows 10
Computer 1      WebEx           40.1.8.5            Windows 10
Computer 2      WebEx           40.1.8.5            Windows 10
Computer 3      WebEx           38.1.6.3            Windows 7
Computer 5      WebEx           40.1.8.5            Windows 10

Попытка получить выведите вот так:

Count   OS          Product Name    Product Version
2       Windows 10  Visio           16.0.11929
                    PowerBI         2.72.5556
                    WebEx           40.1.8.5

1       Windows 7   Visio           16.0.11000
                    WebEx           38.1.6.3

1       Windows 7   Visio           16.0.11929

1       Windows 10  Visio           16.0.11000
                    PowerBI         2.72.5556
                    WebEx           40.1.8.5

Я думал, что смогу использовать что-то вроде этого, но неправильная группировка:

group-object -property 'Product Name', 'Product Version', OS

1 Ответ

1 голос
/ 08 марта 2020

Начните с переупорядочения данных так, чтобы все строки, принадлежащие одному компьютеру, были сгруппированы:

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...