Выбор сортировки группы PowerShell

Я подразумеваю, что пытаюсь немного научиться и борюсь с тем, что, как я думал, было бы базовым Group By, Order By, ... при работе с JSON.

Ниже одна из моих попыток

      $response = Invoke-WebRequest -Uri 'https://jsonplaceholder.typicode.com/todos' -UseBasicParsing | ConvertFrom-Json
$response = $response | Sort-Object -property completed, Count
$response = $response | Group-Object -property userId, completed, Count
$response = $response | Select-Object -property name, Count
$response | ft

Все, что я пытаюсь сделать, это создать таблицу из трех столбцов: userId, completed, Count, упорядоченный по завершению, и Count, но, похоже, не могу понять это правильно.

Может кто-нибудь мне помочь. Как только я получу 1 функциональный пример, все будет в порядке.

Спасибо

1 ответ

Вы хотите сгруппироваться - больше ничего:

      $response = Invoke-WebRequest -Uri 'https://jsonplaceholder.typicode.com/todos' -UseBasicParsing | ConvertFrom-Json
$groupedByUserId = $response |Group-Object -Property userId

Это уже даст правильный Count собственность, и Name собственность будет иметь userId значение, которое нас интересует, поэтому все, что нам нужно построить, это счетчик:

      $groupedWithCounts = $groupedByUserId |Select-Object -Property @{Name='userId';Expression='Name'},@{Name='completed';Expression={@($_.Group |Where-Object completed).Count}},Count

На этом этапе мы можем отсортировать в желаемом порядке (здесь completed count, затем count, затем идентификатор пользователя):

      $sortedGroups = $groupedWithCounts |Sort-Object completed,Count,userId

Собираем все вместе:

      $response = Invoke-WebRequest -Uri 'https://jsonplaceholder.typicode.com/todos' -UseBasicParsing | ConvertFrom-Json

$groupedByUserId = $response |Group-Object -Property userId
$groupedWithCounts = $groupedByUserId |Select-Object -Property @{Name='userId';Expression='Name'},@{Name='completed';Expression={@($_.Group |Where-Object completed).Count}},Count
$sortedGroups = $groupedWithCounts |Sort-Object completed,Count,userId

$sortedGroups |Format-Table

Результат:

      userId completed Count
------ --------- -----
4              6    20
6              6    20
3              7    20
2              8    20
9              8    20
7              9    20
1             11    20
8             11    20
10            12    20
5             12    20

Так же, как Select-Object, Sort-Object принимает более сложные выражения свойств, чем просто имена свойств:

      PS ~> $groupedWithCounts |Sort-Object @{Expression='completed';Descending=$true},{$_.userId -as [long]}

userId completed Count
------ --------- -----
5             12    20
10            12    20
1             11    20
8             11    20
7              9    20
2              8    20
9              8    20
3              7    20
4              6    20
6              6    20
Другие вопросы по тегам