PowerShell 以 1 小时的步骤对 DateTime 进行分组

PowerShell group DateTime in 1h steps

我想用 powershell 导出 IIS 统计信息,但我的分辨率只有 1d。如何将 $log 分成 1 小时的部分?

foreach ($item in ($log | Group-Object -Property Date ))
{
    Write-Host $("{0};" -f $item.Name) -NoNewline
    Write-Host $("{0};" -f $(($item.Group | measure ).Count)) -NoNewline
    Write-Host $("{0:N2};" -f $(($item.Group | measure -Property Sent -Sum).Sum / 1MB)) -NoNewline
    Write-Host $("{0:N2};" -f $(($item.Group | measure -Property Received -Sum).Sum / 1MB))
}

编辑: 遗憾的是,如果我添加 ,* 来获取整个对象

,这会非常慢
$group = $log | 
    Select-Object @{Name="Hour"; Expression={"{0} {1}" -f $_.Timestamp.Date ,$_.Timestamp.Hour}},* | 
    Group-Object -Property Hour

您可以使用 Select-Object cmdlet 将每个 Date 的小时部分提取为 calculated property 并按 属性 分组:

$log | Select-Object @{Name="Hour";Expression={$_.Date.Hour}} | Group-Object Hour