打印机监控脚本(PowerShell)

打印机监控脚本(PowerShell)

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

我想知道实时执行此操作的最佳方法是什么,并不断检查事件查看器。我需要注意什么注意事项?

谢谢

编辑:好的,所以我很可能会使用 PowerShell 并使用 Get-EventLog,然后编辑“表”数据。我遇到的问题是:如果我要将所有这些数据保存到文本文件中,我该如何从中获取数据?我可以使用逗号分隔的文件,但是这个,我不太确定。而且,一旦解决了这个问题,我仍然不确定如何使文件保持实时更新。我可以让这个服务变得像服务一样,而不会占用所有资源吗?例如,每 x 秒运行一次?

编辑2:因此,我尝试在本地 PC 上使用 WMI 工具(即通过 GUI)添加事件筛选器和消费者,尝试使其正确记录我的打印作业。看起来我的事件被捕获了,尽管与该事件相关的脚本存在问题。我让它休息了一个周末,回到办公室后,我注意到 wbemess.log 文件上有大量事件,如下所示:

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

或者

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

我还注意到 wmiprvse.exe 的 CPU 使用率出现峰值。在谷歌上搜索了一下后,我发现一个人通过将 WMI 重新安装到注册表中解决了他的问题。我想知道这是否是解决问题的唯一方法。当我实施这个时,我真的不希望这种情况发生在我们的生产打印服务器上......

答案1

您可能不想像 unix 管理员一样通过日志来了解打印机的最新状态。如果有一种方法可以收到打印机事件的通知,那不是很好吗?好消息是 Windows 中有。我首先阅读了这篇文章: 使用 WMI 通知.然后看看Windows PowerShell 2.0 CTP2 WMI 事件监控

我测试了这个简单的 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"

打印某些内容时,应该得到一条输出行

答案2

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

相关内容