Skip to content

Instantly share code, notes, and snippets.

@GeoHolz
Created November 3, 2023 09:56
Show Gist options
  • Save GeoHolz/1266a4935f89e43b9dc62f39ecb1d2b1 to your computer and use it in GitHub Desktop.
Save GeoHolz/1266a4935f89e43b9dc62f39ecb1d2b1 to your computer and use it in GitHub Desktop.
Script to report on all prints made by a print server over a period of time and send it by email. ( Task scheduler )
$From = "XXX@XXX.com"
$To = "XXX@XXX.fr"
$aPrinterList = @()
$dateActuel= Get-Date -Format "dd/MM/yyyy"
$Subject = $dateActuel+ " : Impression sur XXX"
$StartTime = $dateActuel+" 03:00:00"
$EndTime = $dateActuel+" 23:00:00"
$Results = Get-WinEvent -FilterHashTable @{LogName="Microsoft-Windows-PrintService/Operational"; ID=307; StartTime=$StartTime; EndTime=$EndTime;} -ComputerName XXX
ForEach($Result in $Results){
$ProperyData = [xml]$Result.ToXml()
$PrinterName = $ProperyData.Event.UserData.DocumentPrinted.Param5
$hItemDetails = New-Object -TypeName psobject -Property @{
DocName = $ProperyData.Event.UserData.DocumentPrinted.Param2
UserName = $ProperyData.Event.UserData.DocumentPrinted.Param3
MachineName = $ProperyData.Event.UserData.DocumentPrinted.Param4
PrinterName = $PrinterName
PageCount = $ProperyData.Event.UserData.DocumentPrinted.Param8
TimeCreated = $Result.TimeCreated
}
$aPrinterList += $hItemDetails
}
$DataTable = New-Object System.Data.DataTable "DataTable"
$col1 = New-Object system.Data.DataColumn PageCount,([string])
$col2 = New-Object system.Data.DataColumn MachineName,([string])
$col3 = New-Object system.Data.DataColumn DocName,([string])
$col4 = New-Object system.Data.DataColumn TimeCreated,([string])
$col5 = New-Object system.Data.DataColumn UserName,([string])
$col6 = New-Object system.Data.DataColumn PrinterName,([string])
$DataTable.Columns.Add($col1)
$DataTable.Columns.Add($col2)
$DataTable.Columns.Add($col3)
$DataTable.Columns.Add($col4)
$DataTable.Columns.Add($col5)
$DataTable.Columns.Add($col6)
foreach ($entry in $aPrinterList){
$row = $DataTable.NewRow()
$row.PageCount = $entry.PageCount
$row.MachineName = $entry.MachineName
$row.DocName = $entry.DocName
$row.TimeCreated = $entry.TimeCreated
$row.UserName = $entry.UserName
$row.PrinterName = $entry.PrinterName
$DataTable.Rows.Add($row)
}
$HtmlTable = "<table border='1' align='Left' cellpadding='2' cellspacing='0' style='color:black;font-family:arial,helvetica,sans-serif;text-align:left;'>
<tr style ='font-size:12px;font-weight: normal;background: #FFFFFF'>
<th align=left><b>PageCount</b></th>
<th align=left><b>MachineName</b></th>
<th align=left><b>DocName</b></th>
<th align=left><b>TimeCreated</b></th>
<th align=left><b>UserName</b></th>
<th align=left><b>PrinterName</b></th>
</tr>"
foreach ($row in $DataTable)
{
$HtmlTable += "<tr style='font-size:12px;background-color:#FFFFFF'>
<td>" + $row.PageCount + "</td>
<td>" + $row.MachineName + "</td>
<td>" + $row.DocName + "</td>
<td>" + $row.TimeCreated + "</td>
<td>" + $row.UserName + "</td>
<td>" + $row.PrinterName + "</td>
</tr>"
}
$HtmlTable += "</table>"
# The password is an app-specific password if you have 2-factor-auth enabled
$Password = "XXXX" | ConvertTo-SecureString -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $From, $Password
Send-MailMessage -From $From -To $To -Subject $Subject -Body $HtmlTable -BodyAsHtml -SmtpServer "smtp.gmail.com" -port 587 -UseSsl -Credential $Credential
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment