Получаем логи печати принтеров из журнала событий Windows

В Windows вы можете отслеживать использование принтеров пользователями с помощью журнала событий Windows. Все задания печати, которые отправляются на печать через Print Spooler оставляют след в логах Event Viewer. Если у вас развернут принт-сервер на Windows, вы можете использовать эти логи для организации простой системы аудита печати, которая позволяет понять кто, когда и сколько печатал на ваших принтерах.

В этой статье мы покажем, как включить и настроить логирование событий печати в Windows, как просматривать историю печати из Event Viewer, и как выполнять поиск и фильтрацию событий печати с помощью PowerShell

Включить ведение логов печати в Windows

В Windows есть отдельный журнал Event Viewer, в который должны записываться все события печати SystemRoot%\System32\Winevt\Logs\Microsoft-Windows-PrintService%4Operational.evt . Но по умолчанию это журнал отключен. Чтобы включить сохранение логов печати в журнал:

  1. Откройте консоль Event Viewer ( eventvwr.msc );
  2. Перейдите в раздел Applications and Services Logs -> Microsoft -> Windows -> PrintService;
  3. Щелкните правой кнопкой по журналу Operations и выберите Enable Log; Включить журнал событий печати в Windows
  4. Если данный хост используется как сервер печати, и вы хотите хранить логи печати за большой промежуток времени, нужно увеличить размер этого журнала событий (по умолчанию 1Мб). Откройте свойства журнала Operational и укажите максимальный размера журнала. увеличить размер лога печати в event viewer
Также вы можете включить (отключить) определенный журнал событий в Windows с помощью команды:

wevtutil.exe sl Microsoft-Windows-PrintService/Operational /enabled:true

Если вы хотите, чтобы в журнале событий отображалось имя файла, который был отправлен на печать, нужно включить специальный параметр GPO.

  1. Откройте редактор локальной GPO ( gpedit.msc );
  2. Перейдите в раздел Computer Configuration -> Administrative Templates -> Printers;
  3. Включите параметр Allow job name in event logs; Групповая политика: показывать имя документа в логи печати
  4. Обновите настройки политик с помощью команды gpupdate /force

После жэтого информация о всех событиях печати будет сохраняться в этот журнал.

Просмотр логов печати в Windows с помощью Event Viewer

Теперь вы можете получить подробную информацию о всех событиях печати, которые выполнялись на этом компьютере.

Откройте Event Viewer и перейдите в раздел Applications and Services Logs -> Microsoft -> Windows -> PrintService -> Operational. Наибольший интерес тут представляет собой событие с Event ID 307: Printing a document

Откройте описание события:

Document 12, Microsoft Word - winitpro.docx owned by kbuldogov on \\DESKTOP-HOME607 was printed on HP LaserJet M1530 MFP Series PCL 6 through port USB001. Size in bytes: 32780. Pages printed: 1. No user action is required.

В описании события указано:

  • Из какого приложения и какой файл был напечатан: Microsoft Word — winitpro.docx
  • Имя пользователя, отправившего документ на печать: kbuldogov
  • Имя принтера: HP LaserJet M1530 MFP Series PCL 6
  • Количество страниц в документе: Pages printed: 1
  • Размер документа: size in bytes

Событие печати на принтер с кодом 307

Таким образом, вы получите инструмент ведения и просмотра истории печати в Windows.

Анализ логов печати с помощью PowerShell

Журнал событий Event Viewer не позволяет получить удобную статистику истории печати в Windows или выполнять поиск по дате/пользователю/документу. Для обработки и фильтрации событий печати можно использовать PowerShell скрипты.

Для получения событий из журнала PrintService/Operational мы будем использовать PowerShell комнадлет Get-WinEvent.

Следующий PowerShell скрипт выведет список всех документов, которые были напечатаны на этом компьютере за последние сутки (скрипт выбирает значения из атрибутов события с EventID 307):

$all2dayprint=Get-WinEvent -FilterHashTable @{LogName="Microsoft-Windows-PrintService/Operational"; ID=307; StartTime=(Get-Date).AddDays(-1)} | Select-object -Property TimeCreated, @{label='UserName';expression={$_.properties[2].value}}, @{label='Document';expression={$_.properties[1].value}}, @{label='PrinterName';expression={$_.properties[4].value}}, @{label='PrintSizeKb';expression={$_.properties[6].value/1024}}, @{label='Pages';expression={$_.properties[7].value}}
$all2dayprint|ft

PowerShell скрипт для выбора всех событий печати в Windows

Если вы хотите вывести только документы, которые распечатал определенный пользователь, используйте такой скрипт:

$PrintUsername='kbuldogov'
$all2dayprint| Where-Object -Property UserName -like $PrintUsername|ft

Можно выгрузить список напечатанных документов в CSV файл с помощью Export-CSV:

$all2dayprint | Export-Csv -Path "c:\ps\Print Audit.csv" –NoTypeInformation -Encoding UTF8

Или представить его в виде графической формы Out-GridView:

$all2dayprint| Out-GridView -Title "Все события печати"

PowerShell: найти все документы, которые отправил на печать пользователь Windows

Можно запланировать этот PowerShell скрипт на ежедневный запуск и писать информацию об использовании принтеров во внешнюю базу данных.


Предыдущая статья Следующая статья


Комментариев: 3 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)