打印机监控脚本(PowerShell)

我将编写一些脚本来检查Windows Server 2003中的所有打印作业的事件查看器,然后将它们写入逗号分隔的文本文件,如printername_floor_room.txt

我想知道什么是最好的办法是实时做,并不断检查事件查看器。 任何需要注意的警告?

谢谢

编辑:好的,所以我最有可能去PowerShell和使用Get-EventLog,然后编辑“表”数据。 我遇到的问题:如果我要将所有这些数据保存到文本文件中,我如何从中获取数据? 我可以用逗号分隔的文件,但是这个,我不太确定。 一旦整理出来,我还不确定如何保持文件实时更新或更新。 我可以做这种服务,而不占用所有资源? 每隔x秒运行一次?

编辑2:所以我试图添加事件filter和消费者使用WMI工具(通过GUI,即)在本地电脑上,试图让它正确地login我的打印作业。 它看起来像我的事件被捕获,虽然我的脚本链接到事件有问题。 我让它rest了整个周末,回到办公室后,我注意到wbemess.log文件上有很多事件,如下所示:

(星期五4月30日16:39:00 2010.112476500):从Win32_PrintJob轮询查询select *失败,错误代码为80041033.将在下一个轮询间隔重试

要么

(2010年5月3日星期一09:25:23 2010.1380562):NT事件日志消费者:无法检索sid,0x80041002

我也注意到wmiprvse.exe在CPU使用率的峰值。 在Google上search一下,我发现有一个人通过将WMI重新安装到registry中来解决他的问题。 我想知道这是否是解决这个问题的唯一方法。 我真的不希望这种情况发生在我们的生产打印服务器,当我执行此…

你可能不想试图通过日志像一个Unixpipe理员试图得到最新的打印机状态。 如果有办法得到一个打印机事件的通知,这不是很好吗? 好消息是在窗户里有。 我首先阅读这篇文章: 通知WMI 。 然后查看Windows PowerShell 2.0 CTP2 WMI事件监视

我testing了这个简单的powershell脚本:

$query = "Select * From __InstanceCreationEvent within .1 Where TargetInstance ISA 'Win32_printjob'" $action = write-host "Printed Document status" (gwmi win32_printjob).status ", time" (gwmi win32_printjob).timesubmitted register-wmievent -query $query -action $action -sourceidentifier "printerwatcher" 

当你打印某些东西时,你会得到一个输出行

PowerShell有一些很好的钩子,但在Server 2003上,我相信它仅限于本地收集。 这也是批处理模式,而不是实时的,我不知道这对你是否重要。 Server 2008有更好的挂钩实时监控。