Выбор сортировки группы 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