PDA

Показать полную графическую версию : Группировка в массиве


solonenko
01-02-2022, 16:12
Добрый день
Есть массив данных. В данный момент в массиве 26 элементов, для примера первый элемент


mid : a795ac98-b255-425f-8f2e-42ff419b283f
uid : dc531eb6-228c-423d-bf0d-b04e3a6e7332
templateName : appointment-5
log : {@{status=seen; when=2022-01-27T06:07:52.235Z}, @{status=delivered; when=2022-01-27T06:07:50.172Z}, @{status=query; when=2022-01-27T06:07:49.359Z}}
lastStatusUpdate : 2022-01-27T06:07:55.746Z
status : interact
code : 10
channel : viber
type : accepted



Удается сделать группировку например по полю channel

$mass | group channel -NoElemen

Count Name
----- ----
19 viber
5 sms
2 wab


Задача: сгруппировать по дате (из поля lastStatusUpdate), например по дню недели, числу, месяцу. Для этого при группировке по идеи нужно получить требуемый формат

$mass | group lastStatusUpdate -NoElement

Count Name
----- ----
1 2022-01-27T06:07:55.746Z
3 2022-01-27T06:11:44.262Z
12 2022-01-27T06:36:26.647Z
3 2022-01-27T13:37:37.487Z
5 2022-01-28T06:09:46.187Z
1 2022-01-28T11:54:37.702Z
1 2022-01-28T11:54:23.503Z


Например get-date ($mass.lastStatusUpdate[0]) -Format ddMMMM - даст 27января
Вопрос: как правильно использовать get-date в $mass | group чтобы получить результат

Count Name
----- ----
19 27января
7 28января

solonenko
01-02-2022, 16:34
upd
Так получилось. Подскажите пож. по синтаксису. { } почему нужно использовать. Правильно ли это в данном случаи? Или есть другой вариант решения задачи

PS C:\WINDOWS\system32> $mass | group { Get-Date($_.lastStatusUpdate) -Format dd' 'MMMM } -NoElement

Count Name
----- ----
19 27 января
7 28 января

alpap
01-02-2022, 20:33
да вариантов масса, надо понимать где и как расположен контент

$file = 'Например путь к файлу, содержащему один элемент'

$hFile = [Ordered]@{}
Switch -Regex -File ($file) {
Default {
$Line = $_ -Split ':',2
$hFile[$Line.TrimEnd()[0]] = $Line.TrimStart()[1]
}
}
$hFile.lastStatusUpdate|Get-Date -f "dd MMMM"




© OSzone.net 2001-2012