«Группа по дням» в PowerShell - PullRequest
       4

«Группа по дням» в PowerShell

3 голосов
/ 19 октября 2010

Хорошо, у меня есть этот скрипт, где я читаю в CSV (преобразованный из XLS) и сохраняю поле идентификатора, а также поле даты в массив. Вот так:

New-Object PSObject -prop @{
    TheId = $_."The ID";
    TheDate = [DateTime]::Parse($_."The Date")
}

Это работает как шарм, и я получаю хороший массив объектов с двумя вышеупомянутыми свойствами. Теперь я хотел бы получить количество предметов на каждый день, без необходимости делать foreach для циклического прохождения и тому подобное. Есть ли лучшее решение для этого? (Обратите внимание, что TheDate также содержит разные времена, которые я бы хотел игнорировать.)

Ответы [ 2 ]

6 голосов
/ 19 октября 2010

Group-Object позволяет использовать блоки скриптов в качестве значений -Property. Так что вы можете использовать Date свойство для группировки:

# demo: group temporary files by modification date (day!):
Get-ChildItem $env:temp | Group-Object {$_.LastWriteTime.Date}

# answer for your example:
$objects | Group-Object {$_.TheDate.Date}
1 голос
/ 19 октября 2010

Я решил это с помощью цикла, по крайней мере сейчас:

$startDate = [DateTime]::Parse($startDate)
$endDate = [DateTime]::Parse($endDate)

$items = $items | Where { $_.TheDate -gt $startDate -and $_.TheDate -lt $endDate } | Sort-Object -Property TheDate

$dates = @{}

foreach ($item in $items)
{
    $dates.($item.TheDate.ToShortDateString()) += 1
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...