gifts2017

Анализ журналов аудита подсистемы печати Windows в 1С:Предприятие

Опубликовал Юрий Дешин (blackhole321) в раздел Программирование - Практика программирования

Пример использования библиотеки "Работа с PowerShell из 1С" для получения событий аудита подсистемы печати Windows с последующим  анализом количества распечатанных документов в различных разрезах.

Введение 

В реальной жизни, периодически возникают задачи оценки загруженности принтеров в различных разрезах. В ОС Windows имеются инструменты, позволяющие регистрировать события, связанные с печатью документов, однако их последующая обработка и анализ требуют определенных усилий. С другой стороны, платформа 1С:Предприятие обладает развитыми инструментами для хранения данных и построения отчетов, однако не обладает развитыми средствами для сбора информации, в частности из журналов событий Windows. Таким образом настоящая статья является одним из примеров того, как можно при помощи компонента для работы с PowerShell из 1С совместить плюсы обеих систем для решения практической задачи. 

Описание 

Пример реализован в виде демонстрационной конфигурации. Функционал примера, может быть протестирован при использовании совместно с продуктивной версией библиотеки для работы с PowerShell либо при использовании тестовой базы online.

Для упрощения, в качестве примера, все дальнейшие настройки будем производить на локальном компьютере с учетной записью, имеющей права администратора. Протестировать работу online можно при помощи демонстрационной базы. 

 

Настраиваем аудит событий печати 

Для того, чтобы события печати начали регистрироваться в журнале событий Windows, необходимо настроить аудит событий печати на сервере печати (в нашем случае в качестве сервера печати используется локальный компьютер). 

  

Включаем журнал аудита событий печати 

В оснастке Event Viewer выбираем Applications and Services Logs->Microsoft->Windows->Print Service->Operational. 

В панели Action (находится справа) нажимаем Enable Log (см. рис. 1.). 

В производственной среде данную настройку можно сделать при помощи групповых политик. 

 

Настраиваем принтеры для генерации событий аудита 

В панели управления выбираем Devices and Printers. 

Выбираем нужный нам принтер (для тестов используем Microsoft XPS Writer, который установлен по умолчанию) и переходим к его свойствам (прваой кнопкой мыши на принтере->Printer Properties) (см. рис. 2.). 

Выбираем вкладку Security и переходим к дополнительным свойствам (кнопка Advanced) (см. рис 3.). 

В открывшемся окне переходим на вкладку Auditing и добавляем запись параметров аудита. 

В окне добавления записи аудита выбираем пользователя или группу, для которой будет осуществляться аудитнашем случае Everyone), выбираем тип событий - Success (успех) и тип разрешений Print (Печать) (см. рис. 4.). 

Далее сохраняем сделанные настройки.  

 

Проверка генерации событий аудита 

Открываем notepad. 

Распечатываем документ на принтере, который мы настроили ранее. 

Если все настроено корректно, в журнале Applications and Services Logs->Microsoft->Windows->Print Service->Operational появятся соответствующие события, среди которых будет событие с кодом 307. 

 

Импорт данных в 1С:Предприятие 

Как можно увидеть (см. рис. 5.), в событии с кодом 307 есть информация о пользователе, который распечатал документ, компьютере, с которого пользователь осуществлял печать, имени принтера, на который осуществлялась печать, а также количестве распечатанных страниц. В принципе этой информации нам достаточно и теперь, необходимо передать ее в 1С:Предприятие для последующей обработки и анализа.  

Возможно несколько вариантов организации импорта, однако в нашем случае мы воспользуемся компонентом для работы с PowerShell из 1С:Предприятие. 

  

Скрипт PowerShell 

Недолгий поиск дает нам заготовку скрипта PowerShell, которую мы можем использовать для извлечения необходимых нам событий из журнала Windows (https://gist.github.com/9to5IT/9619820). 

Немного модифицировав скрипт под нашу задачу, получим что-то типа: 

 

param 

( 

$computer, 

$EventStartTime,  

$EventEndTime 

) 

 

if ($EventStartTime -eq $null) 

{ 

         $EventStartTime = (([System.DateTime]::Now.addDays(-1)).Date) 

} 

else 

{ 

        $EventStartTime = [System.DateTime]::ParseExact($EventStartTime,'yyyyMMddHHmmss',$null)  

} 

 

if ($eventEndTime -eq $null) 

{ 

        $eventEndTime = [System.DateTime]::Now 

} 

else 

{ 

        $EventEndTime = [System.DateTime]::ParseExact($EventEndTime,'yyyyMMddHHmmss',$null)  

} 

 

$aPrinterList = @() 

 

$Results = Get-WinEvent -Computer $computer -FilterHashTable @{LogName="Microsoft-Windows-PrintService/Operational"; ID=307; StartTime=$EventStartTime; EndTime=$EventEndTime; } 

 

ForEach($Result in $Results) 

{  

        $ProperyData = [xml]$Result.ToXml()  

 

        $hItemDetails = New-Object -TypeNamepsobject -Property @{  

        DocName = $ProperyData.Event.UserData.DocumentPrinted.Param2  

        UserName = $ProperyData.Event.UserData.DocumentPrinted.Param3  

        MachineName = $ProperyData.Event.UserData.DocumentPrinted.Param4  

        PrinterName = $ProperyData.Event.UserData.DocumentPrinted.Param5  

        PageCount = $ProperyData.Event.UserData.DocumentPrinted.Param8  

        TimeCreated = $Result.TimeCreated.ToString("yyyyMMddHHmmss") } 

        $aPrinterList += $hItemDetails 

}  

 

return $aPrinterList 

 

Разрешаем удаленное подключение к серверу печати посредством PowerShell 

 

Поскольку скрипт использует удаленное подключение к серверу печати, необходимо разрешить удаленное администрирование сервера печати через PowerShell. 

 

Это можно сделать запустив команду winrm quickconfig из консоли с правами администратора или выполнив командлет Enable-PSRemoting из консоли PowerShell, запущеной с правами администратора.В производственной среде данную настройку можно сделать при помощи групповых политик. 


 

1C:Предприятие 

Создаем общий макет и помещаем туда созданный ранее скрипт.  

Создаем объекты конфигурации, которые необходимы для хранения полученных данных (см. рис. 6.).  

Создаем процедуру импорта данных. Фрагмен ткода, иллюстрирующий работу с компонентом представлен ниже: 

 

// Инициализируем компонент PowerShell 

Компонент = PS.ЗагрузитьКомпонент(); 

Конвейер = PS.СоздатьКонвейерКоманд(Компонент); 

Конвейер.ReceiveTimeout = ПолучитьТаймаутЗапроса(); 

 

// Получаем текст скрипта PowerShell 

Текст =PSСлужебный.ПолучитьТекстИзОбщегоМакета("PSРаботаСПринтерами"); 

 

// Формируемпараметры 

МассивПараметров = НовыйМассив; 

МассивПараметров.Добавить(ПолучитьНаименованиеСервераПечати(СерверПечати)); 

МассивПараметров.Добавить(Формат(ДатаНачала, "ДФ=yyyyMMddHHmmss")); 

МассивПараметров.Добавить(Формат(ДатаОкончания, "ДФ=yyyyMMddHHmmss")); 

 

// Выполняемскрипт 

Результаты = PS.ВыполнитьPowerShell(Текст, МассивПараметров, Компонент, Конвейер); 

 

ЕслиPS.БылиОшибки(Компонент, Конвейер) Тогда 

Ошибки = PS.ПолучитьОшибки(Компонент, Конвейер); 

Попытка 

Рез = 1/0; 

Исключение 

ЕслиТипЗнч(Ошибки.Objects.Object.Property) = Тип("Массив") Тогда 

ВызватьИсключениеОшибки.Objects.Object.Property[0].Exception; 

Иначе 

ВызватьИсключениеОшибки.Objects.Object.Property.Exception; 

КонецЕсли; 

КонецПопытки; 

КонецЕсли; 

 

// Обновляем/добавляемданные 

ПринтерыСервер.ОбновитьИнформациюОРаспечатанныхДокументах(СерверПечати, ДатаНачала, Результаты); 

 

// Освобождаемресурсы 

PS.ВыгрузитьКомпонент(Компонент); 

 

Тестируем работу online 

Создаем демонстрационную базу online. 

Задаем таймаут выполнения запроса, равным скажем 300000 (см. рис. 7.). Это максимальное время ожидание ответа от сервера PowerShell в миллисекундах (время работы скрипта). 

Создаем элемент справочника Серверы печати (см. рис. 8.). 

Распечатываем несколько документов на тестовый принтер. 

Запускаем обработку импорта данных. 

Смотрим результаты в отчете (см. рис. 9.). 

Скачать файлы

Наименование Файл Версия Размер
Демонстрационная конфигурация 1
.cf 44,09Kb
20.12.15
1
.cf 44,09Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Анатолий Галов (zorven) 05.05.16 09:58
Отличный софт для анализа журналов событий Windows,Event Log Explorer™ это эффективное средство для просмотра и анализа событий, хранящихся в журналах операционных систем семейства Microsoft Windows. Программа позволяет существенно ускорить и упростить решение задач анализа журналов событий, таких как журнал безопасности, журнал приложений, журнал системы, журнал установки и других.Скачать можно через http://eventlogxp.com/rus/.