автоматический отправка писем outlook

Журнал «Системный администратор» Сайт журнала «Системный администратор» Последний выпуск: 03.2008 Последние опубликованные статьи: 01.2008Меняем деньги на статьиЧем больше статей, тем больше денег! Весомое удовольствие для всех! Админский приз Новости Авторам Содержание Статьи Исходный код Подписка 2008 Приобрести Реклама Контактная информация Мероприятия Диски Работа (бета!) Форум журнала Электронное приложение Рассылка на Subscribe.ru: Чем для Вас является журнал «Системный администратор»? Источником полезных сведений, которые Вы потом применяете на практике Сборником занимательных материалов автоматический отправка писем outlook новостей для развлечения Результаты Поиск: www.samag.ru Web Управляемсерверами в реальном временис помощьюWSH-сценариевАндрей БирюковПроблемы, связанные с перебоями электроснабжения, уже давно являютсяголовной болью для системных администраторов автоматический отправка писем outlook специалистов по обслуживаниюсети. Системы, предлагаемые компаниями-производителями, не всегдаполностью отвечают необходимым требованиям. Сегодня мы расскажем вам, какиспользовать WSH-сценарии для взаимодействия серверов с системамибесперебойного питания.Вместо предисловияНа тему использования различных сценариев в задачах системногоадминистрирования уже написана масса всевозможных статей. Особенно это касаетсяLinux/UNIX-операционных систем, обладающих мощными языками сценариев, которыепозволяют выполнять большое количество различных административных задач.А что же Windows? В Windows имеется WSH – WindowsScript Host, это основной инструмент для всех административных сценариев,поскольку все административные сценарии выполняются внутри WSH. Сценарии WSHможно писать на языках Jscript .NET, VBScript, Perl, Python автоматический отправка писем outlook REXX. Вданной статье все примеры сценариев приводятся на VBScript.Документация по WSH предлагает использоватьсценарии преимущественно для сбора информации о системе, работы с файловойсистемой или изменении различных системных настроек. Однако сегодня мыпоговорим об использовании сценариев для автоматизированного мониторингаи управления Windows-серверами.Постановка задачиПричина, по которой возникла необходимость в написании сценариядля автоматизированного управления Windows-серверами, довольно проста,особенно в свете недавних проблем с подачей электропитания.У заказчика имелось несколько серверов Windows 2003, автоматический отправка писем outlook требовалосьорганизовать бесперебойное электропитание на основе APC UPS. В комплекте сUPS поставлялось программное обеспечение, в состав которого входил агент длявзаимодействия с UPS. Один из серверов подключался к источникубесперебойного питания через COM-порт автоматический отправка писем outlook на этом сервере былустановлен агент, который в случае отключения питания должен был корректнозавершить работу сервера. А вот на остальных серверах такой агент безподключения к источнику через СОМ-порт не работал, автоматический отправка писем outlook следовательно,эти сервера в случае исчезновения питания проработали бы ровностолько, насколько хватило бы заряда аккумулятора, автоматический отправка писем outlook потом простоотключатся, что, очевидно, совсем не хорошо. Компания-производитель предлагаетв качестве решения проблемы приобрести специальное оборудование, проще говоря,СОМ-свитч, однако в силу ряда причин нас подобный вариант не устроил.Тогда автоматический отправка писем outlook был написан сценарий на VBScript, которыйотслеживал в журнале событий появление сообщения об отключениипитания на том сервере, где установлен агент, автоматический отправка писем outlook затем, еслипо прошествии некоторого периода времени питание не восстанавливалось,начинал корректно выключать сервера, при этом отправляя администратору письмопо электронной почте с уведомлением об отключении.На примере такого сценария мы автоматический отправка писем outlook рассмотримреализацию задачи управления серверами с помощью VBScript. Думаю, примерыпрограмм автоматический отправка писем outlook методы работы, изложенные в статье, могут быть полезны нетолько при решении описанной проблемы, но также автоматический отправка писем outlook для других задачавтоматизации системного администрирования в реальном времени. Итак,приступим к реализации. Прежде всего создадим текстовый файл с расширениемvbs. Для выполнения сценария достаточно будет лишь запустить созданныйvbs-файл.Читаем журнал событий (Event Log)Основой разрабатываемого сценария является цикл, который осуществляет поискв журнале событий вхождений искомого сообщения. Такие сообщения могут быть двухвидов: сообщение об отключении питания автоматический отправка писем outlook о его восстановлении.Рисунок 1. Журнал событий EventLog, содержащий сообщения от агента источника бесперебойного питанияПри отключении питания в журнале событийпоявляется сообщение следующего вида (см. рис. 2).Рисунок 2. Сообщение оботключении основного питанияЗабегая вперед, замечу, что нас будет особоинтересовать именно поле Description, то есть тот текст, который сохраняется вжурнале в качестве описания.При восстановлении питания агент создаст вжурнале событий следующее сообщение (см. рис. 3).Рисунок 3. Сообщение овосстановлении основного питанияИтак, мы определили, как выглядят сообщения,отправляемые агентом источника бесперебойного питания. В журнале событийнам необходимо искать сообщения с полем Description вида: «UPS On Battery»или «Utility Power Restored», которые будут сигнализировать о потере питания иего восстановлении соответственно.Реализация поиска данных сообщений в журналесобытий может выглядеть, например, вот так:Листинг 1. Поиск сообщений вжурнале событий Option ExplicitDim objWMI, objItem ' Objects// Объявляем переменныеDim strComputerDim  intRecordNum, intRec, colLoggedEventsDim strAdmin, strAdmin2, i,intrecordNum2, iteration' WMI Core Section // Сервер, на которомвыполняется сценарийstrComputer="127.0.0.1"Set objWMI = GetObject("winmgmts:"_& "{impersonationLevel=impersonate}!\\"_& strComputer &"\root\cimv2")iteration=2 // счетчикитераций// искомые строки –отключение питанияstrAdmin = "UPS On Battery"// искомые строки – восстановлениепитанияstrAdmin2 = "Utility PowerRestored"Do While 1=1 // циклбесконечный    // запрос по журналусобытий. Раздел Applications    Set colLoggedEvents = objWMI.ExecQuery("Select * from Win32_NTLogEvent Where Logfile = 'Application'" )        // счетчики записей    intRecordNum=0 // счетчикнайденных записей    intRec=0 // счетчик всехзаписей    intRecordNum2=0       For Each objItem in colLoggedEvents           // ищем первоевхождение записи           // на отключение           If intRecordNum=0 Then           If InStr(1,objItem.message,strAdmin,1)Then intRecordNum = intRec+1           End If            // ищем первоевхождение записи           // навосстановление           If intRecordNum2=0Then           If InStr(1,objItem.message,strAdmin2,1)Then intRecordNum2 = intRec +1           End If           intRec=intrec+1           // если все нашли,выходим из цикла           If intRecordNum>0AND intrecordNum2>0 Then Exit For        Next       / если не нашлизаписей об отключении,       // то автоматический отправка писем outlook записи овосстановлении не нужны       If intrecordNum=0 ThenintRecordNum2=0       If iteration=0 Then                       shutdown         // автоматический отправка писем outlook здесь будетнаходиться ссылка на процедуру       // отключения питанияна других серверах        End If       If intrecordNum0Then iteration=iteration-1       End If    loopWScript.Sleep 10000 //Задержка перед следующей итерациейСледует немного пояснить принцип работы данногосценария, автоматический отправка писем outlook также смысл некоторых переменных. Одной из ключевых переменных,используемых в работе сценария, является переменная iteration.Данная переменная определяет количество итераций,а проще говоря, временной интервал, в течение которого наши сервера будутработать от источника бесперебойного питания, ожидая восстановления питания вэлектрической сети. Это сделано специально, чтобы в случаях кратковременногопропадания питания, на несколько секунд, сервера не начали автоматическиотключаться. Этот интервал времени зависит от емкости аккумуляторов вашегоисточника бесперебойного питания автоматический отправка писем outlook должен определяться опытным путем.Итак, в случае, если сценарий находит вхождениесообщения об отключении питания, счетчик iteration уменьшается на единицу, придостижении нулевого значения мы вызываем процедуру shutdown, о которой речьпойдет ниже.Также следует обратить внимание на последнюю командусценария, которая определяет период бездействия цикла перед выполнениемитерации, в миллисекундах. Указанный в листинге интервал в десять секунд на практикескорее всего окажется крайне мал. Опыт показывает, что интервал должен быть неменее минуты, так как уже в течении одной минуты любой источник бесперебойногопитания просто обязан держать напряжение. К тому же поиск по всему журналусобытий может отнимать довольно значительные ресурсы системы. Для борьбы с этимможно рекомендовать понизить приоритет процесса со «среднего» на «нижесреднего».Вообще читателю, искушенному в программировании,алгоритм, приведенный в Листинге 1, может показаться немного странным инуждающимся в доработке. Такое мнение будет вполне справедливо, так как,составляя алгоритм, я, основываясь на своем опыте, сделал ряд допущений,тем самым существенно его упростив автоматический отправка писем outlook сделав более удобочитаемым, не в ущербкачеству. Но, возможно, в вашем конкретном случае потребуется что-либодоработать или исправить. Однако продолжим, следующим этапом у нас будетпроцедура отключения питания.Отключаем сервераИтак, перед нами стоит задача программно отключить питание на всех серверахнашей сети. Для этого прежде всего необходимо завести на всех серверах (вслучае, если в сети нет домена) или в домене учетную запись, наделеннуюсоответствующими правами.Я бы очень не рекомендовал использовать для этихцелей учетную запись администратора, так как в исходном тексте необходимоуказать пароль учетной записи, которая используется для выполнения отключения.Также из соображений безопасности необходимо ограничить доступк данному сценарию так, чтобы его могли читать/запускать толькоадминистраторы. Подобная настройка выходит за рамки данной статьи, однакоя думаю, что любой системный администратор без труда справится с этойзадачей.Листинг 2. Процедураотключения питания Sub ShutdownOn Error Resume Next // еслиошибка, переходим к следующемуDim arrComputers, objLocator Dim login, password, domain// Перечисляем именасерверов, которые должны быть выключены arrComputers = Array("Computer1","Computer2","Computer3")login="operator" //учетная запись с правом на shutdownpassword="password"// парольdomain="TEST" //доменFor Each strComputer In arrComputers    Set objLocator = CreateObject("WbemScripting.SWbemLocator")    Set objWMIService = objLocator.ConnectServer(strComputer,"root\cimv2", login, password, domain)    Set colOperatingSystems =objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")    For Each objOperatingSystemin colOperatingSystems           // непосредственноshutdown           ObjOperatingSystem.Shutdown(1)    Next    // после отключенияуведомим администратора    sendmail(strComputer)      NextWScript.Quit // сценарийзавершает свою работуEnd SubВ данной процедуре прежде всего необходимоуказать имена серверов автоматический отправка писем outlook доменную учетную запись обладающей правами на отключениесистемы. В примере приведена доменная учетная запись, однако, думаю, несоставит большого труда внести изменения в текст программы, указав учетныезаписи для конкретных серверов.Также в тексте мы встречаем упоминание опроцедуре отправки сообщений администратору или службе технической поддержки. Вкачестве параметра данной процедуре передается имя отключенного сервера.Рассмотрим процесс отправки уведомлений болееподробно.Отправляем уведомленияНа самом деле вполне логично отправить уведомление всем заинтересованнымлицам о том, что тот или иной сервер был отключен в связи с потерей питания. Вчастности, мы сбережем нервную систему системного администратора, который, незная причины, почему посреди ночи его сервера не пингуются, в ужасепомчится из дома на работу. А так наш сисадмин будет уже заранеезнать причину отключения автоматический отправка писем outlook по крайней мере не будет излишне переживать поповоду возможной потери данных. Также подобное уведомление будет весьмаполезно, если сервера находятся на аутсорсинге, либо в компании приходящийадминистратор.Конечно, кто-то может возразить, что у агента,который взаимодействует с источником бесперебойного питания, уже естьвозможность отправки уведомления администратору об отключении питания. Однакоэтот агент отправит уведомление об отключении питания, автоматический отправка писем outlook нас интересуетинформация об отключении каждого сервера, автоматический отправка писем outlook не только того, на которомустановлен агент.Итак, обосновав необходимость отправкиуведомления, приступим к описанию практической реализации. Современныетехнологии связи позволяют различные способы уведомления администратора оразличных событиях в сети. Например, мне приходилось слышать о системе, котораяв случае возникновения внештатной ситуации звонила админу по заранее заданномутелефону автоматический отправка писем outlook проигрывала mp3-файл, содержавший голосовую информацию. Но в такиекрайности мы вдаваться не будем – отправим уведомление при помощи электроннойпочты. В принципе, с помощью того метода, который будет описан далее, навернякаможно отправлять автоматический отправка писем outlook ICQ-сообщения автоматический отправка писем outlook даже SMS (хотя из-за различных ограничений,введенных операторами сотовой связи, это сделать будет крайне затруднительно).Раньше для отправки сообщений посредствомсценариев Windows использовался почтовый клиент Outlook. При этомприменялся сценарий следующего вида:Листинг 3. Отправка письма спомощью Outlook Dim OutlookObject, OutMailSet OutlookObject = CreateObject("Outlook.Application")Set OutMail = OutlookObject.CreateItem(0)OutMail.to = "test@test.ru"OutMail.Subject = "Темасообщения"OutMail.Body = "Телосообщения"OutMail.SendОднако для нашей задачи данной способ отправкисообщений совершенно не пригоден. Подобный метод отправки почты активноиспользовался почтовыми вирусами для рассылки самих себя на другие машины. ВИнтернете до сих пор можно встретить статьи, посвященные написанию почтовыхвирусов, основанных на подобных сценариях VBScript. В связи с этим теперь Outlookкаждый раз спрашивает, перед тем как позволить сценарию отправить письмо (см.рис. 4).Рисунок 4. Запрос на отправкусообщенияК тому же практически любой антивирус заблокируетработу сценария.По понятным причинам нас это совершенно неустраивает. Но существует другой способ отправки почтовых сообщений сценарием.Данная процедура была найдена мной в MSDN [1].Листинг 4. Отправка письма // Получаем в качествепараметра имя сервераSub sendmail(server)// Инициализируем переменныеDim iMsgDim iConfDim FldsDim strConst cdoSendUsingPickup = 1Set iMsg = CreateObject("CDO.Message")Set iConf = CreateObject("CDO.Configuration")// Подготавливаем поля дляотправки по SMTPSet Flds = iConf.FieldsWith Flds    .Item("http://schemas.microsoft.com/cdo/configuration/sendusing")= cdoSendUsingPickup    .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverpickupdirectory")= "c:\inetpub\mailroot\pickup"    .UpdateEnd With// Непосредственно текстсообщенияstr= "Уважаемыйадминистратор. Сервер  " & server & " был отключен"& Now &" в связи с потерей электропитания. " // заполоняем все полясообщенияWith iMsg    Set .Configuration = iConf    .To = "admin@server.com" // Поле «Кому»    .From ="ups@example.com" // Поле «От кого»    // Тема письма    .Subject ="Отключение питания на сервере " & server      .HTMLBody = str    .SendEnd With // Очищаем переменныеSet iMsg = NothingSet iConf = NothingSet Flds = NothingEnd SubДанная процедура отправит письмо по указанномуадресу. В результате получателю придет сообщение примерно следующегосодержания:Уважаемыйадминистратор. Сервер  MyServer  был отключен 01.10.2005 23:03:31 в связи спотерей электропитания.При необходимости процедуру можно легкоподправить, для того чтобы отправлялось сразу несколько писем различнымадресатам.Таким образом, мы решили третью автоматический отправка писем outlook последнююзадачу, которая ставилась перед нашим сценарием WSH. Исходный код всегосценария прилагается к статье.Также хотелось бы обратить ваше внимание ещена один щекотливый момент. В случае восстановления питания необходимоснова включить отключенные сервера. Для этого прежде всего надо в BIOS каждогоиз серверов установить свойство «Wake Up On LAN  ON». Я не думаю, что это можетсоздать какие-то трудности в повседневной работе хотя бы потому, что серверадолжны быть всегда включены, их не выключают на ночь. Теперь намнеобходимо создать какой-либо трафик с помощью нашего сценария. Сделать этоможно с помощью фрагмента одной из процедур, описанной ранее. Далее приводитсяфрагмент Листинга 1, в котором при обнаружении сообщения о восстановлениипитания вызывается процедура WakeUp, осуществляющая пинг каждогоиз серверов (Листинг 6 соответственно). Обратите вниманиена использованный в Листинге 6 метод Run. С помощью него можно выполнитьлюбую команду, причем (как показано в Листинге 6) это делается в режиме hide.Если в вашем случае необходимо видимое окно, просто в качестве второгопараметра для метода Run укажите единицу. Более подробное описание данногометода автоматический отправка писем outlook его параметров можно найти в [1].Листинг 5. Добавление вызовапроцедуры Wakeup в сценарий Листинга 1……………..// Ищем первое вхождениезаписи на восстановлениеIf intRecordNum2=0 ThenIf InStr(1,objItem.message,strAdmin2,1) Then intRecordNum2 = intRec +1WakeUpEnd If………….. Листинг 6. Процедура WakeUp Sub WakeUpOn Error Resume Next // еслиошибка, переходим к следующемуDim arrComputersDim WshShell, str// Перечисляем именасерверов, которые должны быть выключеныarrComputers = Array("Computer1","Computer2","Computer3")Set WshShell = CreateObject("WScript.Shell")For Each strComputer In arrComputers    str="ping"& strComputer    //запускаем в режиме hide    Return = WshShell.Run(str,0)NextEnd SubЗаключениеИтак, мы рассмотрели основные аспекты написания сценария дляавтоматизированного управления серверами Windows при работе с источникомбесперебойного питания. Теперь в случае отключения электропитания все нашисервера не окажутся предоставлены сами себе в ожидании полной разрядкиаккумулятора, автоматический отправка писем outlook будут корректно выключены без потери данных.Очевидно, что алгоритмы автоматический отправка писем outlook процедуры, изложенныев данной статье, можно с тем же успехом использоватьи для решения других задач автоматизации управления серверами иаудита журнала событий с отправкой уведомлений администратору. Например, длянаблюдения за корректностью работы тех или иных сервисов автоматический отправка писем outlook приложений,результатов проведения резервного копирования автоматический отправка писем outlook других административныхдействий.Ссылка:1. http://msdn.microsoft.com – содержитмного примеров с исходными текстами сценариев.— Версия статьи для печати. Обсуждение статьи: Тема: Сообщение: Имя: E-mail: К статьям из журнала 10.2005 >>Вернуться в раздел статей >> Новые статьи: Переводим домен Active Directory на лицензионную основу Разворачиваем кластер Microsoft Exchange Создание автоматический отправка писем outlook балансировка отказоустойчивых служб с помощью Cisco Content Switch Asterisk: организуем автоматическое распределение поступающих вызовов Два канала – роскошь? Резервирование автоматический отправка писем outlook балансировка трафика во FreeBSD Последние темы форума: Автоматическая установка драйверов (30.04.2008) Проблема! (прокси, шлюз, Ping автоматический отправка писем outlook т.п.) (30.04.2008) Как защитить комп от юзера? (30.04.2008) Помогите (29.04.2008) Хочется продолжения статьи "проектируем систему обмена данными" (29.04.2008) Обсуждаемые статьи: Файловая система NTFS извне автоматический отправка писем outlook изнутри [2] (25.04.2008) Как быстро автоматический отправка писем outlook эффективно провести учет компьютерной техники [1] (23.04.2008) Это должен знать каждый, или Четыре базовых принципа выбора коммутатора ЛВС [2] (22.04.2008) Как купить ПО от Microsoft? Часть 3. Приобретаем в рассрочку [11] (22.04.2008) Организуем работу офисного почтового сервера на платформе Windows [6] (21.04.2008) [AD] © Все права защищены, по всем вопросам обращаться сюда. разделы распыление ароматизатор отчетность пбоюл кайт пилотажный госпиталь мэш кострома коммерческий гидрант 5004.14 (крышка) беседка кассовый машина вино заказ прибор крыса золотник 264-27-00 5003.17 (крышка) сделать пазл билет задорнов конкурентный анализ вышивка флаг купля производственный комплекс дермато-венеролог купить айсбест красный площадь собор катетер структурный штукатурка пластиковый пакет автономный электроснабжение купить ломтерезку глюкозамин-хондроитиновый комплекс эдас-934 аденома предст.ж-зы лад кулер регулируемый автоматический отправка писем outlook