2010-10-19 50 views
3

好吧我有這個腳本,我用CSV讀取(從XLS轉換而來),並將ID字段和日期字段保存到數組中。像這樣:PowerShell中的「按日期分組」

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

它的工作原理就像一個魅力,我得到了一個很好的上述兩個屬性的對象數組。現在,我想每天獲得項目的數量,而不必執行foreach循環等。有更好的解決方案嗎? (注意:TheDate包含不同的時期也是如此,這是我想忽略。)

回答

5

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

這真是太棒了,正是我在找的!而且這很簡單..:o) – Robin 2010-10-19 10:53:57

1

我有一個循環解決了這個問題,至少目前是這樣:

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