使用WMI获取打印机日志

时间:2013-03-04 20:43:14

标签: powershell scripting wmi

我正在尝试使用WMI从多个服务器获取打印机系统日志。一周前,我制作了以下代码,由于某些原因,它有时只能起作用:

wmic /node:<servername> NTEvent WHERE "logfile='System' AND SourceName='Print' AND TimeGenerated > '20130219'" get EventCode,TimeGenerated,Message 

这行代码有时会起作用,但是大多数时候,当我尝试运行它来获取日志时,我会收到以下错误:

ERROR:
Code = 0x80020009
Description = Exception occurred.
Facility = Dispatch

我想知道是否有人知道为什么会这样,以及是否有更好的方法来重写我的代码。我考虑过使用get-wmiobject cmdlet,但是我不确定如何过滤并获取我想要获取的相同日志。

1 个答案:

答案 0 :(得分:0)

有两种方法可以做到这一点。都没有使用Get-WMIObject

选项1:获取整个事件日志,然后过滤。

Get-EventLog -LogName System -Source Print|where-object{$_.timeGenerated -gt (get-date "2013-02-19")}|select-object eventid, timegenerated,message | Export-csv -path r:\log.csv -notypeinfo;

选项2:在源处过滤

Get-WinEvent -FilterHashtable @{logname='system';source='print';StartTime=(get-date "2013-02-19").date;}|select-object id,timecreated,message;

最佳做法是尽可能靠近数据源(Filter Left, Format Right)进行过滤,在这种情况下,这将是选项2。