PowerShell 监控Windows打印服务器 - 卡斯特梅的雨季 - 51CTO技术博客

场景:所有办公打印机安装在一台08r2 server上,客户端通过\\print-server的共享方式来连接使用打印机。想实现报表记录打印的用户,打印的文件名,使用的打印机名称(打印文件大小,打印的时间)

操作:

1、打开08r2Server上PrintService的记录功能,路径在Microsoft-Windows-PrintService下的Operational日志。

推荐是移动到其他路径,因为一旦打开保不齐就磁盘空间不足这样……

PowerShell 监控Windows打印服务器 - 卡斯特梅的雨季 - 51CTO技术博客

PowerShell 监控Windows打印服务器 - 卡斯特梅的雨季 - 51CTO技术博客

2、计划是将"打印文件名,打印用户名,打印时间,打印机名称,打印页数"这几项提取出来,输出成csv,方便统计和筛选。

其他说明见脚本注释

 

 

    #获取日志,事件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

}

 

3、脚本存为ps1格式,记得在跑脚本的服务器上跑一下

 
set-executionpolicy -executionpolicy RemoteSigned

 

以设置允许使用本地脚本。

然后再用PowerShell执行脚本。会在指定的$Path目录生成一个以当天日期命名的csv文件。效果见下图:

客户服务器上提的日志,象征性打码。

PowerShell 监控Windows打印服务器 - 卡斯特梅的雨季 - 51CTO技术博客

4、扩展使用:

自己使用需根据实际情况修改日志路径和生成的CSV路径 

增加取日志时间区间,以实现日报,周报,月报,季报,年报……各种时间区间报

日志的XML是带用户的sid的,OU调整的好的话,可以获取部门名称

日志的格式是固定的,可以不通过xml来取,用正则表达式会更快。

省下了一笔装第三方打印服务器的钱……

参考资料:

太多了…写点关键点吧

www.pstips.net

PowerShell 追加 CSV 数据

PowerShell 创建自定义对象

New-Object PSObject –Property [HashTable]

本文出自 "卡斯特梅的雨季" 博客,请务必保留此出处http://sodaxu.blog.51cto.com/8850288/1417385

你可能感兴趣的:(powershell)