2013-03-04 59 views
1

我试图使用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,但我不确定如何筛选并获取我试图获取的相同日志。

回答

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。

+0

嗨alroc,是否有一个选项可以将日志直接转储到.txt文件后,我已经得到它?我使用的是自从我使用这个服务器的服务器(win 2003)之后所写的第一个选项没有Powershell。 – Valrok 2013-03-05 18:34:46

+0

要添加到我的评论,我试过添加| ConvertTo-Csv在行末,尝试将它输出到某种文件,我可以访问所有日志数据。 – Valrok 2013-03-05 18:40:04

+0

我已经将'Export-CSV'添加到第一个解决方案。调整路径以符合您的要求。请注意,如果您在Excel中打开,多行消息*将*正确显示,但您必须使行更高才能看到。 – alroc 2013-03-05 19:21:46