PowerShell监控Windows打印服务器

转自: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
}

 

posted @ 2015-05-11 14:16  dongdonggeorge  阅读(758)  评论(1编辑  收藏  举报