按日期和时间跨度过滤 activity 日志条目,功率 shell

Filter activity log entries by day and time span with power shell

我有以下工作电源shell命令:

Get-Eventlog -Logname system -Source user32 | Select TimeGenerated, EntryType, Message

但是我只想要周一到周五以及早上 6 点到下午 4 点之间的条目。 我怎样才能过滤这些条目。

感谢您的帮助。

流浪汉

如果您不想创建日期界限:

Get-Eventlog -LogName system -Source user32 |
    Where-Object { $_.TimeGenerated.DayOfWeek -ge ([DayOfWeek]'Monday') -and $_.TimeGenerated.DayOfWeek -le ([DayOfWeek]'Friday') -and $_.TimeGenerated.Hour -ge 6 -and $_.TimeGenerated.Hour -lt 16 } |
    Select-Object TimeGenerated, EntryType, Message

创建日期边界可能更有效,尤其是如果您只想返回几周,这会在 Get-EventLog 上提供 Before 和 After 参数。为此使用 Where-Object 效率较低。

这是您需要的:

Get-Eventlog -Logname system -Source user32 | `
    Where {$_.TimeGenerated.DayOfWeek -ge [DayOfWeek]::Monday `
      -and $_.TimeGenerated.DayOfWeek -le [DayOfWeek]::Friday `
      -and $_.TimeGenerated.Hour -ge 6 `
      -and $_.TimeGenerated.Hour -lt 16} | `
    Select TimeGenerated, EntryType, Message

如果你想更精确一点:

Get-Eventlog -Logname system -Source user32 | `
    Where {$_.TimeGenerated.DayOfWeek -ge [DayOfWeek]::Monday `
      -and $_.TimeGenerated.DayOfWeek -le [DayOfWeek]::Friday `
      -and $_.TimeGenerated.TimeOfDay -ge [Timespan]::Parse('06:00') `
      -and $_.TimeGenerated.TimeOfDay -le [Timespan]::Parse('16:00')} | `
    Select TimeGenerated, EntryType, Message