0

我有以下代码行,当前将获取服务器的打印机事件日志:

Get-EventLog -ComputerName ********* -LogName System -Source Print|where-object{$_.timeGenerated -gt (get-date "2013-03-11")}|select-object eventid,timegenerated,message |export-CSV -Path "C:\temp\export.csv"

目前,Get-Date 用于获取我在代码行中编写的特定日期的打印机日志。但是,我想更改此设置,以便一次获取一整周的打印机日志。我正在查看 TechNet 关于 Get-Date 的文章,但我没有看到任何关于如何设法指定要从前一周而不是一天中提取结果的内容。我该怎么做呢?

编辑:另外,我想找到一种不需要指定具体日期的方法。例如,我希望能够从本周获取日志,然后在下周获取新日志,而无需更改代码上的日期。

4

3 回答 3

5

我假设这是您上一篇文章的后续文章,使用 WMI 获取打印机日志

正如我在对该问题的回答中指出的那样,您应该在源头进行过滤Get-EventLog- 而不是在Where-Object. Get-EventLog为此提供了两个参数 --Before-After.

通过在源头进行过滤,您将通过网络发送更少的数据,这可以显着提高性能。它还将减少远程系统处理您的请求所需的时间。为什么要索取和检索您甚至不看就丢弃的数据?

要获取一周前和现在之间的所有内容,请执行以下操作:

get-eventlog -computername ******* -logname system -after $((get-date).adddays(-7).date) -before $(get-date) -source Print | select-object eventid,timegenerated,message |export-CSV -Path "C:\temp\export.csv"

根据需要更改传递给-After和的值-Before

于 2013-03-14T18:52:17.107 回答
0

您的 Where-Object 仅返回大于该日期的记录。

Where-Object { $_.timeGenerated -gt (get-date "2013-03-11") }

要获取日期范围,请尝试

Where-Object { $_.timeGenerated -gt [datetime]'2013-03-11' -and $_.timeGenerated -lt [datetime]'2013-03-18' }

这基本上是说:(下限)2013-03-11 <(日志条目生成日期)<2013-03-18(上限)

于 2013-03-14T18:41:48.453 回答
0

在 where 语句中包含另一个测试。像这样:

Get-EventLog -ComputerName ********* -LogName System -Source Print |
where-object{$_.timeGenerated -gt ([datetime]"2013-03-11") -and $_.timeGenerated -lt ([datetime]"2013-03-18")} |
select-object eventid,timegenerated,message |
export-CSV -Path "C:\temp\export.csv"

它检查事件是否比 2013-03-11 新,但比 2013-03-18 旧。

于 2013-03-14T18:41:58.860 回答