Ativar os logs de impressão
É preciso ativar os logs de impressão e também a opção de mostrar o nome do arquivo impresso no log.
Abrir o Visualizador (eventvwr.msc) de Eventos e localizar a opção:
Log de Aplicações e Serviços -> Microsoft -> Windows -> PrintService, clique em propriedades de Operacional

Marcar a opção “Ativar Logs” e definir o tamanho do log de acordo com a sua estrutura. Deixe a opção “Substituir eventos quando necessário (eventos mais antigos primeiro)”.
Em “gpedit.msc” no servidor onde estão instaladas as impressoras e localizar a opção: Configuração do Computador -> Modelos Administrativos -> Impressoras -> “Permitir nome do trabalho em logs de eventos“.

Acessar o gerenciador de impressão, em impressoras, clicar em propriedades e na aba “compartilhamento” desabilitar a opção “Processar trabalhos de impressão em computadores cliente”.

Em algumas versões do Windows Server pode ser necessário ativar a opção através do registro:[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows NT\Printers]
“ShowJobTitleInEventLogs”=dword:00000001
O arquivo pode ser baixado aqui
Caso o nome do documento não apareça nos logs, pode ser necessário a instalação de uma atualização: https://support.microsoft.com/pt-br/kb/2938013
Após realizar os passos acima é preciso realizar algumas impressões e verificar o arquivo de logs para ver se o nome do arquivo está sendo mostrado de acordo com o esperado.
É preciso anexar uma tarefa ao log dos eventos e passar estas informações para o script powershell, que vai pegar os dados das impressões e salvar no banco de dados MySQL.
Voltando para o visualizador de eventos, na mesma tela onde foi ativado os logs, clicar sobre o EventID 307 e clicar na opção “Anexar Tarefa à este Evento”
*É POSSÍVEL PULAR ESSA PARTE BAIXANDO O ARQUIVO AQUI

ATENÇÃO: Em (Adicionar argumentos) coloque o seguinte comando:
-ep Bypass -command C:\Windows\PrintLog\printlog.ps1 '$(EventID)' '$(TimeCreated)' '$(JobID)' '$(FileName)' '$(User)' '$(Client)' '$(Printer)' '$(Address)' '$(JobBytes)' '$(PageCount)'

Crie a pasta dos scripts: mkdir C:\Windows\PrintLog\LOGS
Agora é preciso acessar o Gerenciador de Tarefas e procurar a tarefa previamente cadastrada, clicar com o botão direito do mouse em cima da tarefa e clicar em “Exportar” e salve em C:\Windows\PrintLog.
Edite o arquivo e adicione o seguinte conteúdo na linha 12
<ValueQueries>
<Value name="Address">Event/UserData/DocumentPrinted/Param6</Value>
<Value name="Client">Event/UserData/DocumentPrinted/Param4</Value>
<Value name="EventID">Event/System/EventID</Value>
<Value name="FileName">Event/UserData/DocumentPrinted/Param2</Value>
<Value name="JobBytes">Event/UserData/DocumentPrinted/Param7</Value>
<Value name="JobID">Event/UserData/DocumentPrinted/Param1</Value>
<Value name="PageCount">Event/UserData/DocumentPrinted/Param8</Value>
<Value name="Printer">Event/UserData/DocumentPrinted/Param5</Value>
<Value name="TimeCreated">Event/System/TimeCreated/@SystemTime</Value>
<Value name="User">Event/UserData/DocumentPrinted/Param3</Value>
</ValueQueries>
Exemplo:

Após feita as alterações no arquivo XML, deve-se excluir a tarefa que foi exportada, clicar com o botão direito do mouse e importar o arquivo XML que foi alterado.
Importada a tarefa novamente, é preciso ajustar alguns parâmetros, para isso selecione a tarefa e clique com o botão direito do mouse em propriedades.
– Na aba Geral, marcar a opção: “Executar estando o usuário conectado ou não” e também “Executar com privilégios mais altos”
– Na aba Condições, desmarcar a opção: “Iniciar a tarefa somente se o computador estiver ligado à rede elétrica”
– Na aba Configurações, alterar a opção: “Se a tarefa já estiver sendo executada, a seguinte regra será aplicada” para “Colocar uma nova instância na fila”
Na pasta PrintLog salve o arquivo printlog.ps1 (clique aqui para baixar o arquivo).
Edite o arquivo printlog.ps1 e altere de acordo com seu banco de dados MySQL.
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>#
# MySQL Connection #
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>#
$DBAddress="192.168.*.*"
$DBUser="LOGIN"
$DBPassword="SENHA"
$DBName="printlog"
Para o powershell poder interagir com o MySQL é preciso instalar “MySQL Connector/Net” que pode ser baixado em: http://dev.mysql.com/downloads/connector/net/ ou AQUI.
obs: Windows Server 2019 homologado na versão: mysql-connector-net-8.0.30
Windows (x86, 32-bit), MSI Installer (Download)
Aqui você pode baixar o arquivo printlog.sql (banco de dados para a importação em seu banco de dados MySQL ).
Dica: Caso esteja utilizando um banco de dados externo
mysql> CREATE USER 'printlog'@'IP_SERVIDOR' IDENTIFIED BY 'SENHA';
mysql> GRANT ALL PRIVILEGES ON NOMEDOBANCO.* TO 'printlog'@'IP_SERVIDOR' WITH GRANT OPTION;
OU
mysql> CREATE USER 'printlog'@'%' IDENTIFIED BY 'P@ssW0rd';
mysql> GRANT INSERT ON `printlog` . * TO 'printlog'@'%';
Faça a instalação de uma impressora em alguma estação de trabalho, e realize uma impressão qualquer.
Se tudo ocorreu bem o script vai gerar um arquivo das impressões em arquivo texto e também no banco de dados MySQL.
Visualizando os logs de impressão (WEB)

Download do código fonte do script acima.
Visualizando os logs de impressão (Grafana) Importe via grafana.com -> 14776

Troubleshooting:
Teste de conectividade Windows Server 2019 com Servidor Mysql
Copie o arquivo MySql.zip para C:\ do servidor antes de seguir os passos abaixo:
Windows PowerShell
Copyrith (C) Microsoft Corporation. Todos os direitos reservados.
PS C:\Users\Administrador>
$modulesFolder = 'C:\Program Files\WindowsPowerShell\Modules'
Expand-Archive -Path C:\MySql.zip -DestinationPath $modulesFolder
Rename-Item -Path "$modulesFolder\MySql-master" -NewName MySQL
$dbCred = Get-Credential
Connect-MySqlServer -Credential $dbcred -ComputerName 'IP_MYSQL_SERVER' -Database printlog
Invoke-MySqlQuery -Query 'SELECT * FROM printlog'
Invoke-MySqlQuery -Query 'DESCRIBE printlog'
Algumas consultas SQL:
Trabalho | DATA/Hora | Estação | Login | Impressora | Arquivo | Tamanho | Páginas | Cópias | Total
mysql> SELECT jobid AS "Trabalho",
DATE_FORMAT(timecreated, "%d/%m/%Y %T") AS "DATA/Hora",
client AS "Estação",
USER AS "Login",
printer AS "Impressora",
filename AS "Arquivo",
jobbytes AS "Tamanho",
pagecount AS "Páginas",
numberofcopies AS "Cópias",
totalpages AS "Total"
FROM printlog;
Top 10 logins
mysql> SELECT USER AS "Login",
SUM(totalpages) AS "Total"
FROM printlog
WHERE MONTH(timecreated) = MONTH(NOW())
AND YEAR(timecreated) = YEAR(NOW())
GROUP BY USER
ORDER BY total DESC
LIMIT 10;
Top 10 Impressoras
mysql> SELECT printer AS "Impressora",
SUM(totalpages)AS "Total"
FROM printlog
WHERE MONTH(timecreated) = MONTH(NOW())
AND YEAR(timecreated) = YEAR(NOW())
GROUP BY printer DESC
LIMIT 10;
Top 10 Hoje
mysql> SELECT USER AS Login,
SUM(totalpages) AS Total
FROM printlog
WHERE DATE(timecreated) = CURDATE()
GROUP BY USER
ORDER BY sum(totalpages) DESC
LIMIT 10;
Login/Quantidade mês atual
mysql> SELECT now() as time, user AS "Login",
sum(totalpages) AS "Total"
from printlog
WHERE MONTH(timecreated) = MONTH(NOW())
AND YEAR(timecreated) = YEAR(NOW())
group by user ASC;
Páginas impressas hoje
mysql> SELECT SUM(totalpages)
FROM printlog
WHERE DATE(timecreated) = CURDATE();
Páginas impressas ontem
mysql> SELECT SUM(totalpages)
FROM printlog
WHERE DATE(timecreated) = SUBDATE(CURDATE(), 1);
Total de páginas impressas
mysql> SELECT SUM(totalpages)
FROM printlog
LIMIT 1;
DICA:
Geralmente as impressões do Microsoft Word quando é utilizado impressão e é marcado a opção para imprimir várias cópias, elas não são contabilizadas corretamente, então é preciso executar o script powershell “Dowload” nas estações para forçar que a quantidade de páginas seja gerada da maneira correta.
Troubleshooting:
Correção para script PowerShell não assinado digitalmente
Quando você executa um script .ps1 PowerShell, você pode receber a mensagem dizendo “.ps1 não está assinado digitalmente. O script não será executado no sistema.”
Para corrigi-lo, você tem que executar o comando abaixo para executar a Forma de execução definida e alterar a configuração de Política de Execução.
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Inserindo dados manualmente:
powershell.exe -command C:\Windows\PrintLog\printlog.ps1 '307' '2022-09-16T15:14:05.625Z' '2' '*Untitled - Notepad' 'Administrator' '\\SRVPRINTSERVER' 'Microsoft Print to PDF' 'C:\Users\Administrator\Desktop\hh.pdf' '38339' '1'