跟踪使用Windows Event Viewer日志的打印机用法
在Windows中,您可以使用事件查看器跟踪打印机的使用。在活动查看器中记录了发送给打印阀杆的所有打印作业。如果您在Windows上部署了打印服务器,则可以使用这些日志组织简单的打印审核解决方案,使您能够了解谁在打印机上打印了谁,何时以及多少页。
在本文中,我们将展示如何在Windows中启用和配置打印事件记录,在Event Viewer中查看打印历史记录,以及使用PowerShell搜索或过滤打印事件。
内容:
Windows有一个单独的事件查看器日志,其中所有打印事件已记录:SystemRoot%System32WinevtLogsMicrosoft-Windows-PrintService%4Operational.evt。但是,默认情况下该日志被禁用。在Windows上启用打印记录:
- 打开活动查看器(
eventvwr.msc); - 转到应用程序和服务日志 - > Microsoft-> Windows-> PrintService。
- 右键单击操作并选择启用日志;

- 如果要长时间保留打印日志,则将此事件日志的大小从1MB的默认值增加。打开操作日志属性并设置最大日志大小;


您还可以使用命令启用(禁用)特定事件日志:
wevtutil.exe sl Microsoft-Windows-PrintService/Operational /enabled:true
如果您希望事件日志显示发送用于打印的文件名,则必须启用特殊的GPO设置。
- 打开本地组策略编辑(
gpedit.msc); - 转到计算机配置 - >管理模板 - >打印机。
- 启用选项在事件日志中允许作业名称;


- 使用
gpupdate /force命令。
现在,所有打印事件将在活动查看器中记录。
使用事件查看器在Windows上检查打印历史记录
现在,您可以看到有关此计算机上发生的所有打印事件的详细信息。
另请阅读:如何清除活动查看器中的所有事件日志
打开事件查看器,然后转到应用程序和服务日志 - > Microsoft-> Windows-> printService->操作。找到带有事件ID的事件307:Printing a document。
打开活动详细信息:
Document 12, Microsoft Word - woshub.docx owned by maxadm on \DESKTOP-PC617 was printed on HP LaserJet M1530 MFP Series PCL 6 through port USB001. Size in bytes: 31780. Pages printed: 1. No user action is required.
事件描述包含:
- 打印文件的名称及其被打印的应用程序:
Microsoft Word — woshub.docx - 打印文件的用户名称:
maxadm - 打印机名称:
HP LaserJet M1530 MFP Series PCL 6 - 打印的页数:
Pages printed: 1 - 文件大小:
size in bytes


使用PowerShell打印日志分析
事件查看器不允许获得方便的打印历史记录统计信息,也不允许按日期/用户/文档进行搜索。您可以使用PowerShell处理和过滤打印事件。
要从PrintService/Operational Log中获取事件,请使用Get-WineVent PowerShell CMDLET。以下PowerShell脚本显示了过去24小时内在当前计算机上打印过的所有文档的列表:
$all2dayprint=Get-WinEvent -FilterHashTable @{LogName="Microsoft-Windows-PrintService/Operational"; ID=307; StartTime=(Get-Date).AddDays(-1)} | Select-object -Property TimeCreated, @{label="UserName";expression={$_.properties[2].value}}, @{label="Document";expression={$_.properties[1].value}}, @{label="PrinterName";expression={$_.properties[4].value}}, @{label="PrintSizeKb";expression={$_.properties[6].value/1024}}, @{label="Pages";expression={$_.properties[7].value}}
$all2dayprint|ft


如果您只想显示特定用户已打印的文档:
$PrintUsername="maxadm"
$all2dayprint| Where-Object -Property UserName -like $PrintUsername|ft
您可以使用导出CSV将印刷文档的列表导出到CSV文件中:
$all2dayprint | Export-Csv -Path "c:psPrint Audit.csv" –NoTypeInformation -Encoding UTF8
或以图形外浏览形式查看:
$all2dayprint| Out-GridView -Title "All print jobs"


您可以安排此PowerShell脚本每天运行,并将打印机使用信息写入外部数据库。
例如,您可以将PowerShell脚本的数据写入MySQL,MariadB或Microsoft SQL Server数据库。
