积极答复者
打印服务器报表导出

问题
答案
-
1、根据您给的方案,导出的列表文字都是缺失的,比如打印文件名和打印机名只显示一部分
得到所有打印任务的那个方案也不可行,都是只显示部分,不能显示全,有什么办法能显示完整吗
2、我自己找到了一个解决方案
场景:所有办公打印机安装在一台server2016上,客户端通过\\print-server的共享方式来连接使用打印机。想实现报表记录打印机名,打印机的IP,打印的用户名,用户的IP,打印的文件名,使用的打印机名称,打印文件大小,打印的时间,
1.事件查看器里,应用程序和服务日志-Microsoft-Windows-PrintService-Operational的事件日志,我把保存路径手动改成了d盘
2.修改策略,计算机配置 \ 管理模板\打印机\允许在事件日志中的作业名称 ,改成已启用,最好要重启电脑的
3.执行以下管理员身份运行powershell的权限允许,选择A就行
set-executionpolicy -executionpolicy RemoteSigned
4.将以下代码保存成ps1格式的文件,比如0.ps1,然后运行一下即可
#获取日志,事件ID 307即我们需要提取的事件。 path后的路径要与operational日志属性里的日志路径一致 $log = Get-WinEvent -Path "d:\printlog\Microsoft-Windows-PrintService%4Operational.evtx" | where-object {$_.id -eq "307"} #输出csv文件位置,用当前的日期运行。 $Path="d:\printlog\$(Get-date -UFormat "%Y-%m-%d").csv" foreach ($slog in $log) { #取xml操作 $xmltemp= $slog.ToXml() $xmldata = [xml]$xmltemp #取xml对应的node里的值 $printerName = $xmldata.Event.UserData.DocumentPrinted.Param5 $dyjip = $xmldata.Event.UserData.DocumentPrinted.Param6 $documentsName = $xmldata.Event.UserData.DocumentPrinted.Param2 $userName = $xmldata.Event.UserData.DocumentPrinted.Param3 $userip = $xmldata.Event.UserData.DocumentPrinted.Param4 $file = $xmldata.Event.UserData.DocumentPrinted.Param7 $paGes = $xmldata.Event.UserData.DocumentPrinted.Param8 #取日志时间 $printTime = $slog.TimeCreated #自定义PSObject属性 $hash = @{ [string]"打印机名称"=$printerName; [string]"打印机IP"=$dyjip; [string]"打印文件名"=$documentsName; [string]"用户名"=$userName; [string]"用户IP"=$userip; [string]"打印时间"=$printTime.ToString(); [string]"文件大小(KB)"=$file/1024; [string]"打印页数"=$paGes} $logObj = New-Object PSObject -Property $hash #输出为CSV,逐条添加模式,不带TypeInformation,所以如果要重新输出,还得删掉以前的文件。 Export-Csv -InputObject $logObj -Path $Path -Append -Encoding UTF8 -NoTypeInformation }
5.另外我的是server2016不需要打补丁,此补丁发布日期2014/7/7,没有打这个补丁的还是要打上这个补丁,server2012补丁号是KB2919355,其他没看 。 如果策略中没有这个,说明策略模板admx文件需要更新,参考http://www.alexandreviot.net/2015/10/21/server-2012-import-windows-10-admx-gpo/
6.执行完的效果图,其中打印文档名都是一样,是因为配置了策略,但是我还没重启服务器
全部回复
-
您好:
关于问题1:您可以参考以下文档尝试输出单个打印机业务的列表,或者如果能得到所有打印机的打印业务总表在excel中进行筛选,导出指定打印机的打印业务表。https://docs.microsoft.com/en-us/powershell/module/printmanagement/get-printjob?view=win10-pshttps://social.technet.microsoft.com/Forums/exchange/en-US/06bb2972-cc62-48c8-b944-562b94e273f7/is-there-a-way-to-export-the-list-of-jobs-in-a-printers-queue?forum=winserverManagement关于问题2:您可以在打印服务器属性---高级--更改高级设置--spool folder 中更改缓存文件存放位置
http://www.tomshardware.com/faq/id-1932009/change-printer-spooler-default-location.html
BEST REGARDS
Andy YOU
Please remember to mark the replies as answers if they help.
If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.
-
1、根据您给的方案,导出的列表文字都是缺失的,比如打印文件名和打印机名只显示一部分
得到所有打印任务的那个方案也不可行,都是只显示部分,不能显示全,有什么办法能显示完整吗
2、我自己找到了一个解决方案
场景:所有办公打印机安装在一台server2016上,客户端通过\\print-server的共享方式来连接使用打印机。想实现报表记录打印机名,打印机的IP,打印的用户名,用户的IP,打印的文件名,使用的打印机名称,打印文件大小,打印的时间,
1.事件查看器里,应用程序和服务日志-Microsoft-Windows-PrintService-Operational的事件日志,我把保存路径手动改成了d盘
2.修改策略,计算机配置 \ 管理模板\打印机\允许在事件日志中的作业名称 ,改成已启用,最好要重启电脑的
3.执行以下管理员身份运行powershell的权限允许,选择A就行
set-executionpolicy -executionpolicy RemoteSigned
4.将以下代码保存成ps1格式的文件,比如0.ps1,然后运行一下即可
#获取日志,事件ID 307即我们需要提取的事件。 path后的路径要与operational日志属性里的日志路径一致 $log = Get-WinEvent -Path "d:\printlog\Microsoft-Windows-PrintService%4Operational.evtx" | where-object {$_.id -eq "307"} #输出csv文件位置,用当前的日期运行。 $Path="d:\printlog\$(Get-date -UFormat "%Y-%m-%d").csv" foreach ($slog in $log) { #取xml操作 $xmltemp= $slog.ToXml() $xmldata = [xml]$xmltemp #取xml对应的node里的值 $printerName = $xmldata.Event.UserData.DocumentPrinted.Param5 $dyjip = $xmldata.Event.UserData.DocumentPrinted.Param6 $documentsName = $xmldata.Event.UserData.DocumentPrinted.Param2 $userName = $xmldata.Event.UserData.DocumentPrinted.Param3 $userip = $xmldata.Event.UserData.DocumentPrinted.Param4 $file = $xmldata.Event.UserData.DocumentPrinted.Param7 $paGes = $xmldata.Event.UserData.DocumentPrinted.Param8 #取日志时间 $printTime = $slog.TimeCreated #自定义PSObject属性 $hash = @{ [string]"打印机名称"=$printerName; [string]"打印机IP"=$dyjip; [string]"打印文件名"=$documentsName; [string]"用户名"=$userName; [string]"用户IP"=$userip; [string]"打印时间"=$printTime.ToString(); [string]"文件大小(KB)"=$file/1024; [string]"打印页数"=$paGes} $logObj = New-Object PSObject -Property $hash #输出为CSV,逐条添加模式,不带TypeInformation,所以如果要重新输出,还得删掉以前的文件。 Export-Csv -InputObject $logObj -Path $Path -Append -Encoding UTF8 -NoTypeInformation }
5.另外我的是server2016不需要打补丁,此补丁发布日期2014/7/7,没有打这个补丁的还是要打上这个补丁,server2012补丁号是KB2919355,其他没看 。 如果策略中没有这个,说明策略模板admx文件需要更新,参考http://www.alexandreviot.net/2015/10/21/server-2012-import-windows-10-admx-gpo/
6.执行完的效果图,其中打印文档名都是一样,是因为配置了策略,但是我还没重启服务器