В Windows вы можете отслеживать использование принтеров пользователями с помощью журнала событий Windows. Все задания печати, которые отправляются на печать через Print Spooler оставляют след в логах Event Viewer. Если у вас развернут принт-сервер на Windows, вы можете использовать эти логи для организации простой системы аудита печати, которая позволяет понять кто, когда и сколько печатал на ваших принтерах.
В этой статье мы покажем, как включить и настроить логирование событий печати в Windows, как просматривать историю печати из Event Viewer, и как выполнять поиск и фильтрацию событий печати с помощью PowerShell
Включить ведение логов печати в Windows
В Windows есть отдельный журнал Event Viewer, в который должны записываться все события печати
SystemRoot%\System32\Winevt\Logs\Microsoft-Windows-PrintService%4Operational.evt
. Но по умолчанию это журнал отключен. Чтобы включить сохранение логов печати в журнал:
- Откройте консоль Event Viewer (
eventvwr.msc
); - Перейдите в раздел Applications and Services Logs -> Microsoft -> Windows -> PrintService;
- Щелкните правой кнопкой по журналу Operations и выберите Enable Log;
- Если данный хост используется как сервер печати, и вы хотите хранить логи печати за большой промежуток времени, нужно увеличить размер этого журнала событий (по умолчанию 1Мб). Откройте свойства журнала Operational и укажите максимальный размера журнала.
wevtutil.exe sl Microsoft-Windows-PrintService/Operational /enabled:true
Если вы хотите, чтобы в журнале событий отображалось имя файла, который был отправлен на печать, нужно включить специальный параметр GPO.
- Откройте редактор локальной GPO (
gpedit.msc
); - Перейдите в раздел Computer Configuration -> Administrative Templates -> Printers;
- Включите параметр Allow job name in event logs;
- Обновите настройки политик с помощью команды
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
Таким образом, вы получите инструмент ведения и просмотра истории печати в 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
Если вы хотите вывести только документы, которые распечатал определенный пользователь, используйте такой скрипт:
$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 скрипт на ежедневный запуск и писать информацию об использовании принтеров во внешнюю базу данных.