Скрипт мониторинга принтера (PowerShell)
Я собираюсь написать какой-то скрипт для проверки средства просмотра событий в Windows Server 2003 на наличие всех заданий на печать, а затем записать их в текстовый файл с разделителями-запятыми, например printername_floor_room.txt
Мне интересно, как лучше всего делать это в реальном времени и постоянно проверять средство просмотра событий. Любые предостережения, о которых мне нужно знать?
Спасибо
РЕДАКТИРОВАТЬ: Хорошо, поэтому я, скорее всего, пойду на PowerShell и использую Get-EventLog, а затем отредактирую данные "таблицы". Проблемы, с которыми я сталкиваюсь: если мне нужно сохранить все эти данные в текстовом файле, как мне получить данные из него? Файл с разделителями-запятыми, с которым я мог бы работать, но в этом я не совсем уверен. И как только с этим разберусь, я все еще не уверен, как сохранить файл обновленным более или менее в режиме реального времени. Могу ли я сделать этот сервис похожим, не перегружая все ресурсы? Например, запускать его каждые x секунд?
РЕДАКТИРОВАТЬ 2: Итак, я попытался добавить Фильтр событий и Потребителя, используя WMI Tools (через GUI, то есть) на моем локальном компьютере, пытаясь заставить его правильно регистрировать мои задания печати. Похоже, что мое событие было поймано, хотя что-то не так с моим сценарием, связанным с событием. Я позволил ему отдохнуть на выходных и, вернувшись в офис, заметил в файле wbemess.log кучу событий, например:
(Пт, 30 апреля 16:39:00 2010.112476500): Сбой запроса на выбор * из Win32_PrintJob с кодом ошибки 80041033. Повторить попытку при следующем интервале опроса
или же
(Понедельник, 03 мая, 09:25:23 2010.1380562): Потребитель журнала событий NT: не удалось получить sid, 0x80041002
Я также замечаю всплески использования ЦП wmiprvse.exe. Немного погуглив, я нашел одного парня, который решил свои проблемы, переустановив WMI в реестр. Мне интересно, если это единственный способ решить эту проблему. Я действительно не хочу, чтобы это происходило на нашем производственном сервере печати, когда я реализую это...
2 ответа
Вы, вероятно, не хотите пытаться обрабатывать журналы, как администратор Unix, чтобы попытаться получить информацию о состоянии принтера. Было бы неплохо, если бы вместо этого был способ получать уведомления о событии принтера. Хорошей новостью является то, что в Windows есть. Я бы сначала прочитал эту статью: Уведомить с WMI. затем взгляните на мониторинг событий WMI в Windows PowerShell 2.0 CTP2
Я протестировал этот простой скрипт powershell:
$query = "Select * From __InstanceCreationEvent within .1 Where TargetInstance ISA 'Win32_printjob'"
$action = write-host "Printed Document status" (gwmi win32_printjob).status ", time" (gwmi win32_printjob).timesubmitted
register-wmievent -query $query -action $action -sourceidentifier "printerwatcher"
Вы должны получить строку вывода, когда вы печатаете что-то
У Powershell есть несколько хороших возможностей для этого, но на Server 2003 я считаю, что он ограничен только локальным сбором. Это также пакетный режим, а не в режиме реального времени, я не знаю, имеет ли это значение для вас. Server 2008 имеет лучшие хуки для мониторинга в реальном времени.