2010-10-19 7 views
3

Ok J'ai ce script où je lis dans un CSV (converti à partir d'un XLS) et enregistre un champ ID ainsi qu'un champ de date dans un tableau. Comme si:"Grouper par jour" dans PowerShell

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

Cela fonctionne comme un charme et j'obtiens une belle rangée d'objets avec les deux propriétés ci-dessus. Maintenant, je voudrais obtenir le nombre d'éléments sur chaque jour, sans avoir à faire un foreach pour faire une boucle et tel. Y a-t-il une meilleure solution? (Notez que TheDate contient différents moments aussi, que je voudrais passer sous silence.)

Répondre

5

Group-Object permet d'utiliser des blocs de script comme -Property valeurs . Pour que vous puissiez utiliser la propriété Date pour le regroupement:

# 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} 
+0

C'est fantastique, exactement ce que je cherchais! Et que c'était si facile ..: o) – Robin

1

Je l'ai résolu avec une boucle, au moins pour l'instant:

$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 
}