我有以下代码行,目前可以获取服务器的打印机事件日志:
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的文章,我没有看到任何关于如何指定您想要从前一周而不是一天中提取结果的内容。我该怎么做?
编辑:另外,我想找到一种方法,我没有必要指定具体的日期。例如,我希望能够从本周获取日志,然后在接下来的一周获取新日志,而无需更改代码上的日期。答案 0 :(得分:5)
我假设这是您之前发布的帖子Using WMI to get printer logs
的后续内容正如我在回答这个问题时所说,你应该在源头过滤 - 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
的值。
答案 1 :(得分: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(上限)
答案 2 :(得分: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更早。