PowerShell监控Windows打印服务器

本文介绍了如何使用Powershell脚本从Microsoft-Windows-PrintService日志中提取事件ID为307的日志记录,并将其转换为CSV文件进行进一步分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://sodaxu.blog.51cto.com/8850288/1417385

 

    #获取日志,事件ID 307即我们需要提取的事件。 path后的路径要与operational日志属性里的日志路径一致
$log = Get-WinEvent -Path "F:\pringlog\Microsoft-Windows-PrintService%4Operational.evtx" | where-object {$_.id -eq "307"}
    #输出csv文件位置,用当前的日期运行。
$Path="F:\pringlog\$(Get-date -UFormat "%Y-%m-%d").csv"
foreach ($slog in $log)
{
    #取xml操作
     $xmltemp= $slog.ToXml()
     $xmldata = [xml]$xmltemp
    #取xml对应的node里的值
     $documentsName = $xmldata.Event.UserData.DocumentPrinted.Param2
     $userName = $xmldata.Event.UserData.DocumentPrinted.Param3
     $paGes = $xmldata.Event.UserData.DocumentPrinted.Param8
     $printerName = $xmldata.Event.UserData.DocumentPrinted.Param5
    #取日志时间
     $printTime = $slog.TimeCreated
    #自定义PSObject属性
     $hash = @{
     [string]"打印文件名"=$documentsName;
     [string]"用户名"=$userName;
     [string]"打印时间"=$printTime.ToString();
     [string]"打印机名称"=$printerName;
     [string]"打印页数"=$paGes} 
     $logObj = New-Object PSObject -Property $hash
    #输出为CSV,逐条添加模式,不带TypeInformation,所以如果要重新输出,还得删掉以前的文件。
     Export-Csv -InputObject $logObj -Path $Path -Append -Encoding UTF8 -NoTypeInformation
}

 

转载于:https://www.cnblogs.com/IvanChen/p/4494457.html

1. 该软件无须安装,直接将软件包解压缩到一个目录下,运行PrinterMon.exe程序即可。 2. 如果需要该程序随系统启动而自动启动,则在软件的“打印机列表”节点下, 勾选“用户登录系统后自动运行打印机监视程序”项即可。 3. 该软件除了可以监视本地的打印机之外,还可以监视网络中其他共享的打印机。 只要利用“添加打印机”中提供的三种方法之一枚举相关的打印机, 添加到监控打印机列表中即可。 4. 监控网络上的打印机时,要提供正确的登录认证设置,保证网络可连通并具有合适的权限。 5. 注意防火墙的设置,保证可以正常访问网络上的打印机。 6. 该软件为完全免费,除软件主窗口下部的信息区会尝试连接我们的网站 (http://www.3000soft.net)获取最新产品资料之外,不含有任何收集用户资料或其它恶意的代码。 任何情况下,我们都不为可能造成的任何可以预见或不可预见的损失承担责任。 如果您持有怀疑或担心,请选择不运行此软件,立即删除这些文件。 7. 该软件主要为企业管理者提供打印机、纸张、文件档案等公司资源的监控服务。 因为网络和系统的复杂性,监视到的打印作业资料不表示一定准确,请不要盲目地 依此作出什么结论性的判断。 8. 请不要超越您自己的权限与职责的范围去使用该软件,使用该软件的一切可能后果请自负。
客户端安装个软件。负责监控该电脑的打印动作。并把内容转成图片储存。并将图片传送到服务器机器上,并将打印内容传到服务器上面. 解决方案: 1. 先用api打印函数连接到指定的打印机.再试着用枚举函数()获得打印作业信息.根据信息得知打印的内容,及当前的状态. 2. 获知内容,得知打印内容所在的位置,再某种方式将数据导在图片;再传到服务器上. 技术问题: 1. 打印枚举函数中找不到JOB_INFO_1 或 JOB_INFO_2结构的定义.(已解决) 2. 怎么样获得打印内容.是通过原本的驱动还是其它办法, 其它: 文件传给pdf打印机之前已经存成raw格式了,应该是从缓冲池中直接读取数据 接下去要完成的应该是怎么把raw格式读出来, 具我推测在获得打印信息的时候肯定有某个参数跟这个RAW格式是对应的.读出某个参数后才能再继续读取对RAW文件读取 具微软件网站显示,打印机的格式应该分成5种.raw的三种格式,text,emf(增强型图元文件) RAW格式指是最原始的数据 CreateDC("WINSPOOL", printer, null, ref dv);//用DISPLAY,是获取整个屏幕的设备场景;2、用WINSPOOL,则是访问打印驱动 返回新设备场景句柄,若出错则为零 EMFStreamPrintDocument 实力问题:就算获得句柄也没有办法接下去要做什么.(想错了) 目前状态:EMF图片取出来,监控也可以实现了.但监控打印作业跟EMF图片不知道怎么产生关联.而且EMF图片读起出来比较慢. 取EMF图片本身spl就已经读入内存,但是有一种办法为了要读取图片只能将spl文件考出来再做成emf文件. 新的思路能不能将文件 shd文件中包含了一个作业ID RPC 命名管道 Server(服务器) Server 系统服务提供 RPC 支持以及文件、打印和命名管道在网络上的共享。Server 服务允许本地资源(如磁盘和打印机)共享,因此网络上的其他用户可以访问它们。它还允许在其他计算机上的应用程序与您计算机上的应用程序之间进行命名管道通信,这是用于 RPC 的。命名管道通信是为一个进程的输出(此输出用作另外一个进程的输入)而保留的内存。接受输入的进程不必是本地进程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值