Кто удалил принтер, узнаем за минуту
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в рунете Pyatilistnik.org. В прошлый раз мы с вами разбирали примеры использования утилиты Robocopy на файловом сервере. Двигаемся дальше и сегодня я хочу вас научить, находить информацию на сервере печати относительно того, кто именно удалил сетевой принтер или локальный, думаю, что такой аудит должен у вас быть.
Описание проблемы
Есть настроенный сервер печати, есть опубликованные принтеры в Active Directory. В какой-то момент на вторую линию поступают заявки, что один из принтеров не доступен и печать на нем невозможно. Сотрудник второй линии открыв консоль "Управление печатью" обнаружил, что данного принтера теперь нет на сервере среди доступных. Выяснить куда он делся не удалось, в результате чего коллеги обратились уже к нам на третью линию. Ниже я вам покажу, как аудировать такие вещи.
Поиск событий по удалению принтера
В своем примере я вам покажу, какие события вас смогут заинтересовать, чтобы вы их потом могли мониторить, например в Zabbix или netwrix. Первое, что вы должны сделать, это посмотреть логи Windows, а именно определенный журнал.
Перейдите по такому пути:
Microsoft-Windows-PrintService/Работает (Microsoft-Windows-PrintService/Operational)
Искать события мы будем в журнале PrintService/Работает, убедитесь, что он у вас включен, через правый клик, если он был выключен, то событие удаления предыдущего принтера вы не увидите, только новые.
Быстро проверить включено ли ведение данного журнала или нет можно с помощью PowerShell. Запустите PowerShell оболочку и введите команду:
Select-Object -Property LogName, IsClassicLog, IsEnabled
В статусе IsEnabled должно быть значение True.
так же вы можете сразу в PowerShell включить ведение данного журнала, единственное оболочка должна быть запущена в режиме администратора, введите код:
Select-Object -Property LogName, IsClassicLog, IsEnabled
$PrinterLog.set_IsEnabled($true)
$PrinterLog.SaveChanges()
теперь вам необходимо отыскать два события с номерами ID 301 и ID 302, советую вам воспользоваться фильтрацией. В области "Действия" выберите пункт "Фильтр текущего журнала". В открывшемся окне введите пул поиска 301-302.
В результате я получил список из нужных событий, теперь давайте посмотрим каждое из них.
Видно имя принтера или его GUID, видно имя пользователя кто совершил это действие. Вот пример на сервере с английской локализацией:
Вот пример события ID 302:
или его англоязычный аналог
Очень удобно каждый день делать автоматические отчеты, которые бы содержали в себе выборку по данным событиям, вот пример реализации:
$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 и они были удалены. Вот пример вот такого события:
Как видите все оказалось быстро и просто, теперь вы всегда будите знать кто удалил принтер с сервера или локальной системы, нужны ли данному человеку права или их стоит отнять. К сожалению Microsoft не создала своего хорошего продукта, для аудита принтеров, поэтому PowerShell вам в помощь или сторонние инструменты, например ADAudit Plus. На этом у меня все, с вами был Иван Семин автор и создатель IT портала Pyatilistnik.org.