Кто удалил принтер, узнаем за минуту

Кто удалил принтер, узнаем за минуту

принтерДобрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в рунете Pyatilistnik.org. В прошлый раз мы с вами разбирали примеры использования утилиты Robocopy на файловом сервере. Двигаемся дальше и сегодня я хочу вас научить, находить информацию на сервере печати относительно того, кто именно удалил сетевой принтер или локальный, думаю, что такой аудит должен у вас быть.

Описание проблемы

Есть настроенный сервер печати, есть опубликованные принтеры в Active Directory. В какой-то момент на вторую линию поступают заявки, что один из принтеров не доступен и печать на нем невозможно. Сотрудник второй линии открыв консоль "Управление печатью" обнаружил, что данного принтера теперь нет на сервере среди доступных. Выяснить куда он делся не удалось, в результате чего коллеги обратились уже к нам на третью линию. Ниже я вам покажу, как аудировать такие вещи.

Поиск событий по удалению принтера

В своем примере я вам покажу, какие события вас смогут заинтересовать, чтобы вы их потом могли мониторить, например в Zabbix или netwrix. Первое, что вы должны сделать, это посмотреть логи Windows, а именно определенный журнал.

Перейдите по такому пути:

Microsoft-Windows-PrintService/Администратор (Microsoft-Windows-PrintService/Admin)
Microsoft-Windows-PrintService/Работает (Microsoft-Windows-PrintService/Operational)

Microsoft-Windows-PrintService/Работает

Искать события мы будем в журнале PrintService/Работает, убедитесь, что он у вас включен, через правый клик, если он был выключен, то событие удаления предыдущего принтера вы не увидите, только новые.

Включение журнала PrintService

Быстро проверить включено ли ведение данного журнала или нет можно с помощью PowerShell. Запустите PowerShell оболочку и введите команду:

Get-WinEvent -ListLog Microsoft-Windows-PrintService/Operational -OutVariable PrinterLog |
Select-Object -Property LogName, IsClassicLog, IsEnabled

В статусе IsEnabled должно быть значение True.

Проверка включения журнала Включение журнала PrintService

так же вы можете сразу в PowerShell включить ведение данного журнала, единственное оболочка должна быть запущена в режиме администратора, введите код:

Get-WinEvent -ListLog Microsoft-Windows-PrintService/Operational -OutVariable PrinterLog |
Select-Object -Property LogName, IsClassicLog, IsEnabled

$PrinterLog.set_IsEnabled($true)

$PrinterLog.SaveChanges()

Включение журнала аудита принтеров

теперь вам необходимо отыскать два события с номерами ID 301 и ID 302, советую вам воспользоваться фильтрацией. В области "Действия" выберите пункт "Фильтр текущего журнала". В открывшемся окне введите пул поиска 301-302.

Фильтрация событий 301-302

В результате я получил список из нужных событий, теперь давайте посмотрим каждое из них.

кто удалил принтер

Событие с кодом ID 301: Принтер {087EE38C-96AA-4AA2-BAD8-0000000000} был удален, и пользователи больше не смогут выполнять с него печать. Действий пользователя не требуется.

Видно имя принтера или его GUID, видно имя пользователя кто совершил это действие. Вот пример на сервере с английской локализацией:

Событие с кодом ID 301: Принтер был удален, и пользователи больше не смогут выполнять с него печать

Событие с кодом ID 301: Printer {6517129E-4E12-489A-8AFB-AE3D0000000} was deleted, and users will no longer be able to print to this printer. No user action is required.

Printer {6517129E-4E12-489A-8AFB-AE3000000000},4 will be deleted. No user action is required

Вот пример события ID 302:

Событие с кодом ID 302: Принтер {087EE38C-96AA-4AA2-BAD8-E00000000},11 будет удален. Действий пользователя не требуется.

Событие с кодом ID 302

или его англоязычный аналог

Printer {6517129E-4E12-489A-8AFB-AE3000000000},4 will be deleted. No user action is required.

кто удалил принтер с сервера печати

Очень удобно каждый день делать автоматические отчеты, которые бы содержали в себе выборку по данным событиям, вот пример реализации:

cls
$CurrentDate = Get-date
$date = $CurrentDate.AddDays(-1)
$yesterday = ($CurrentDate) - (new-timespan -day 1)
$a = "<style>"
$a = $a + "BODY{background-color:peachpuff;}"
$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$a = $a + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:thistle}"
$a = $a + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:PaleGoldenrod}"
$a = $a + "</style>"
$EventLog = get-winevent -logname "Microsoft-Windows-PrintService/Operational" | Select UserID, TimeCreated, UserName, MachineName, Message, ID
$EventLog | ForEach-Object {
$_.UserName = $_.UserID.Translate([security.principal.ntaccount])

}

$EventLog | sort-object -property UserName,TimeCreated | where {$_.ID -ne "301" -or "302"} | where {$_.timecreated -ge $yesterday} | ConvertTo-Html -head $a -body "<H2>PrintService</H2>" -As TABLE -Property TimeCreated, UserName, MachineName, Message | Out-File -FilePath "C:\temp\$($yesterday.ToString("yyyyMMdd")).html"

Отчет, о том кто удалил принтер

На выходе вы поймете вот такой отчет

Можете повесить такой скрипт в планировщик заданий и выполнять его каждый день, не забываем, что по необходимости вы можете сконвертировать скрипт ps1 в exe, и так же его использовать.

Еще в журнале Microsoft-Windows-PrintService/Operational я советую поискать события ID 334, если у вас есть принтеры опубликованные в Active Directory и они были удалены. Вот пример вот такого события:

The printer was successfully removed from the Active Directory directory service. Print queue CN=имя компьютера кто удалил was successfully deleted from container LDAP://адрес контроллера домена/CN=PRN02PIK,,OU=Servers,DC=pyatilistnik,DC=org. The printer can no longer be located by searching Active Directory. No user action is required.

событие ID 334

Как видите все оказалось быстро и просто, теперь вы всегда будите знать кто удалил принтер с сервера или локальной системы, нужны ли данному человеку права или их стоит отнять. К сожалению Microsoft не создала своего хорошего продукта, для аудита принтеров, поэтому PowerShell вам в помощь или сторонние инструменты, например ADAudit Plus. На этом у меня все, с вами был Иван Семин автор и создатель IT портала Pyatilistnik.org.

Добавить комментарий

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