none
打印服务器报表导出 RRS feed

  • 问题

  • server2016搭建的打印服务器,

    一  、在打印机上点右键,导出列表,可以得到的csv文件包含以下信息,

    但是现在我想把每个打印机的任务详细列表分别导出,包含以下信息,请问有什么命令或者工具吗

    二 、这些缓存的打印任务全部默认存在C:\Windows\System32\spool\PRINTERS文件夹下,有什么能更改默认缓存位置的吗?


    2018年8月31日 9:53

答案

  • 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.执行完的效果图,其中打印文档名都是一样,是因为配置了策略,但是我还没重启服务器



    • 已标记为答案 郗混沌 2018年9月10日 2:01
    • 取消答案标记 郗混沌 2018年9月10日 2:08
    • 已标记为答案 郗混沌 2018年9月10日 2:25
    • 已编辑 郗混沌 2018年9月10日 2:32
    2018年9月7日 8:58

全部回复

  • 您好:

          正在查找相关资料来解决您的问题,请耐心等待,感谢您的谅解。

    2018年9月4日 12:18
  • 您好:
        关于问题1:您可以参考以下文档尝试输出单个打印机业务的列表,或者如果能得到所有打印机的打印业务总表在excel中进行筛选,导出指定打印机的打印业务表。
    https://docs.microsoft.com/en-us/powershell/module/printmanagement/get-printjob?view=win10-ps
    https://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.


       

    2018年9月6日 6:40
  • 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.执行完的效果图,其中打印文档名都是一样,是因为配置了策略,但是我还没重启服务器



    • 已标记为答案 郗混沌 2018年9月10日 2:01
    • 取消答案标记 郗混沌 2018年9月10日 2:08
    • 已标记为答案 郗混沌 2018年9月10日 2:25
    • 已编辑 郗混沌 2018年9月10日 2:32
    2018年9月7日 8:58