![]() |
[решено] VBS: мониторинг процессов и уведомление на email
Форумчане, день добрый помогите допилить скрипт. Сам не силен.
Сам скрипт vbs Назначение скрипта: мониторинг запущенных процессов указанных в коде, при отсутствии запущенного процесса, запускать его, и отправлять email. Программа notepad взята как тест. На самом деле будет не три программы, а около 30. Поэтому в примере, чтобы код был не большой указал всего 3. Какая длина при 30 программ думаю представляете. Возможно как-то это можно упростить, но я увы не знаю :( Очень хочется добавить в функционал скрипта 1. В полях отправки email чтобы objMessage.Subject и objMessage.TextBody писались имена тех процессов которые были перезапущены. Например если закрылась программа notepad2, скрипт её запустил и отправил email где в полях Тема и тело письма писалось что это notepad2.exe 2. Не уверен что правильная структура кода проверки и запуска процесса, она хоть и работает, но не на 100%. Бывает такое что приложения которые скрипт запускает до конца не запускаются smile. Например мои приложения когда полностью запущены весят в памяти 50МБ, так вот, когда скрипт запускает приложение, оно загружается до 20МБ и вылетает. А если в тотже момент самому тыкнуть на ярлык приложение, оно 100% запустится. Я не могу понять из-за чего это, но и не всегда это происходит. Есть предположения только, не хватает дескрипторов ресурсов. Также прочитал про интерактивный и не интерактивный режим запуска, возможно из-за этого приложение полностью не может загрузится. Т.е. скрипт неправильно написан для режима запуска. 3. Для чего строка в скрипте ? 'WScript.Echo logPath & "/backup" & strDate & ".html" Спасибо, что дочитали до сюда :) |
Код:
Option Explicit |
Iska, спасибо большое за пример, но немного не то.
|
novi, поясните, что именно Вас не устраивает, либо — что я понял из Вашего техзадания неверно.
|
Вложений: 1
Iska,
При загрузке ОС, выполняется автовход, скрипт (в автозагрузке) другой, не тот что указал в шапке темы, запускает мои определённые программы, штук 20. Далее, уже скрипт который в шапке, добавлен в "планировщик заданий", который запускает мой скрипт каждые 10 минут, и проверяет наличие запущенных процессов. Если процесс закрылся, то скрипт его запускает. Скрипт сам в памяти висит только до тех пор, пока все не проверит, потом закрывается. Также в моём скрипте важная строчка: objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 2 'use '2' for NTLM или strSmtpAuth="no" , тобы не логиниться. Проверив Ваш скрипт, получается следующее. Скрипт постоянно висит в памяти. Даже если программы не запущена, он их не запускает, а просто висит. Попытка запустить вручную программу и потом её в ручную закрыть получаю ошибку. После появлении ошибки скрипт выгружается. Может конечно из-за того что я неправильно скорректировал ваш скрипт под себя, а именно smtp в скрипте. Подскажите что изменить, чтобы без авторизации отправлялись письма? |
novi, ясненько. Давайте уточним: приложения, которые запускает скрипт в автозагрузке, и приложения, за процессами которых должен следить и вновь запускать второй скрипт — одни и те же?
Цитата:
Цитата:
Цитата:
Цитата:
Код:
With WScript.CreateObject("CDO.Message") |
Цитата:
Цитата:
Цитата:
В принципе скрипт сверху, этим всем и занимался. Тока не всё умел делать :) С вашей точки зрения он криво написан? |
Пробуйте:
Как и просили, отсылка без авторизации. Если запуск каких-то приложений отличается от обычного (минимизация/скрытие окна, приоритет отличен от Normal, рабочий каталог отличен от каталога приложения и т.п.) — говорите, будем усложнять логику. Цитата:
Цитата:
Цитата:
|
Вложений: 1
Цитата:
1 вариант проверил: не запуская программ, запустил скрипт. Скрипт указанные программы запустил, в диспетчере задач они видны, а в нижней панели "панель задач", их нету :), т.е. они я так понимаю запущены в фоне. Идём далее, с помощью диспетчера задач, выгружаем принудительно одну из программ запущенных скриптом, и вылетает ошибка. Выложил скрин. 2 вариант проверил: с начало запустил все свои программы указанные в скрипте, они нормально отображаются в диспетчере задач. Запускаю скрипт, он ещё раз их запускает, и те которые запустил именно скрипт их не видно. А в диспетчере задач их стало в два раза больше. Т.е. в диспетчере задач следующая картина: по два процесса каждой программы. Оба варианта не оч гуд. Я наверно это не сказал. Запуск программ происходит как в обычном режиме (т.е. если бы мы сами ткнули мышкой на ярлык программы), т.е. запустил программу, и она отобразилась в панеле задач. Цитата:
Цитата:
Бывает такое, что приложения которые скрипт запускает, до конца не запускаются smile. (Это происходит например: запущено 30 программ, по истечении например 2-3-4 недель, эти программы в памяти уже занимаю не 50 мб, а от 70 до 100МБ, после этого скрипт не всегда может запустить эту программу.) Например мои приложения когда полностью запущены занимают в памяти 50МБ, проходит время, эти приложения могут съесть ОЗУ до 100 МБ, (ОЗУ на хосте хватает, не внём дело 100%) так вот, когда скрипт запускает приложение, оно загружается до 20МБ и вылетает. А если в тот же момент самому ткнуть на ярлык приложения, оно 100% запустится. Я не могу понять из-за чего это, но и не всегда это происходит. Есть предположения только, не хватает дескрипторов ресурсов ОС Windows. Также прочитал про интерактивный и не интерактивный режим запуска, возможно из-за этого приложение полностью не может загрузится. Т.е. мой скрипт неправильно написан для режима запуска. В общем загадка :) Цитата:
Цитата:
Цитата:
c:\Programma\Notepad01\notepad01.exe c:\Programma\Notepad02\notepad02.exe c:\Programma\Notepad03\notepad03.exe c:\Programma\Notepad04\notepad04.exe c:\Programma\Notepad05\notepad05.exe и т.д. Вы правы, в идеале хотелось бы получить именно минимизацию. Приоритет пусть будет стандартный, как если бы мы запустили приложение вручную, тыкнув по ярлыку. И также Вы верно подметили, есть часть (не все) приложений, которые умеют скрываться в трей :). |
Цитата:
Давайте уточним, выложенный мною скрипт (с Вашими путями, разумеется) Вы запускали обычным двойным щелчком из Проводника? Или как-то иначе, например, из-под Диспетчера задач? Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Вложений: 1
Очень прошу добавьте пожалуйста в последний вариант скрипта, проверку на самого себя. Мол если запущен, снова не запускать.
А то если два раза скрипт запустить он, проги по второму разу запускает, и wscript.exe процесс также дублируется в диспетчере задач, но и чтобы не получилось так, что нельзя было ещё какой нибудь скрипт запустить типа vbs но с другим кодом. Вопрос, обязательно в коде нужно делать так, чтобы скрипт висел постоянно в процессах? Очень интересно, почему вы пошли по этому пути, а не по пути, запустил-проверил-выгрузился. Впринципе ваш вариант меня полностью устраивает, и даже сказать лучше, т.к. можно его (скрипт), вызвать из батника который при автовходе запускает программы. Последним в списке сделать.И дополнительно не прописывать в шэдулер. Цитата Iska: Ух ты! Это как так получилось? » хз, мож из-за того что на вынь 8.1 запускаю тест. проверю на 2003. На вынь 2003 тоже самое. Если запущены программы, но не скрипт, после запуска скрипта, он их запускает снова. Проверял на программе putty. Программу продублировал так как писал в своем посте выше. Путь запуска приложений следующий: d:\1\01\putty01.exe d:\1\02\putty02.exe d:\1\03\putty03.exe d:\1\04\putty04.exe d:\1\05\putty05.exe и т.д. Если в скрипте не менять пути и проги, то всё гуд запускает как положено, и как нужно "C:\WINDOWS\system32\notepad.exe", "C:\WINDOWS\system32\calc.exe", "C:\WINDOWS\system32\mspaint.exe" Цитата Iska: Давайте уточним, выложенный мною скрипт (с Вашими путями, разумеется) Вы запускали обычным двойным щелчком из Проводника? Или как-то иначе, например, из-под Диспетчера задач? » Всё верно, тока не проводник, а TotalCMD (Total Commander), думаю сути от проводника не меняет. Из под диспетчера нет , этот геморрой ненужен Цитата Iska: Не вижу . » Странно, а он есть , прикреплен. Сейчас сюда прикреплю, скрин от последнего скрипта. Ругается на строчку: .Send Вроде прикрепилось. |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Я вас понял, не уверен что у меня получится это сделать, но попробую. |
Может попробовать явно в Ваш вариант кода добавить такие параметры как:
Предполагаю, что их нужно добавить перед этими строчками. Только как правильно их добавить не понимаю. В моем первом сообщение вызывается функция, а далее внизу скрипта она уже описыватся подробно. |
|
Iska, супер, отлично, то что нужно.
Благодарю :) |
Так приложения начали на панели задач отображаться? Или всё так же отсутствуют?
|
Iska,
Проверял на программе putty. Программу продублировал так как писал в своем посте выше. Путь запуска приложений следующий: d:\1\01\putty01.exe d:\1\02\putty02.exe d:\1\03\putty03.exe d:\1\04\putty04.exe d:\1\05\putty05.exe и т.д. то, отсутствуют :), но в диспетчере задач висят. Если брать во внимания приложения которые Вы указали в скрипте, то присутствуют и запускаются в минимизированном состоянии. |
novi, ясно. Должно быть та же ситуация, что Вы писали выше, когда они «не загружаются целиком».
Знаете что? Вот Вы выше пишете, что при запуске «ручками» приложения загружаются корректно. Так всегда происходит? Что если мы добавим некоторую паузу в процесс последовательного запуска приложений? Начнём с десяти секунд, а Вы, если приложения начнут отображаться на Панели задач, попробуйте поуменьшать это значение. Либо, напротив, увеличить, если не начнут отображаться. |
Цитата:
Цитата:
|
А с Вашими приложениями добавленная пауза не помогла?
|
Iska, смотрите какая получается ситуация с моими приложениями.
Они в данный момент запущены. И если я запускаю скрипт, то он снова делает запуск тех же самых приложений. Пример: В диспетчере задач и соответственно на панель задач запущено 20 программ notepad*.exe notepad01.exe notepad02.exe notepad03.exe notepad04.exe и т.д. если после этого я запускаю скрипт, то в диспетчер задач появляются процессы дубли. notepad01.exe notepad01.exe notepad02.exe notepad02.exe notepad03.exe notepad03.exe notepad04.exe notepad04.exe и т.д. если бы в код добавить проверку того что уже запущено, а не то что он сам сразу запускает, думаю эти дубли бы не пошли. |
novi, я потерял нить обсуждения. Давайте, Вы всё-таки сначала ответите на вопрос:
Цитата:
Цитата:
|
Цитата:
Походу Вашего создания скрипта, я его рассматривал, как добавку к своему стартовому скрипту приложений. Батник лежит в автозагрузке Кода батника примерно следующий: несколько строк вызова других программ (они запускаются единожды и не требуют вмешательства), не относящихся к скрипту. и далее сам вызов моих программ которые будут указаны в скрипте. cd C:\Prorgamma\myproject\01\ start project01.exe timeout /t 10 cd C:\Prorgamma\myproject\02\ start project02.exe timeout /t 10 и т.д. и вот в конец этого батника хотел добавить вызов вашего скрипта. Я так думаю что будет логично. Цитата:
Т.е. получается следующим образом. Батник запускает программы из батника, и в самом конце батника строчка вызова vbs скрипта, который будет висеть и мониторить. Если будет нужда выключить одну из программ, я выгружаю скрипт vbs, закрываю нужную мне программу, делаю то что мне нужно. и потом запускаю vbs, который в свою очередь должен будет запустить программу которую я закрыл, и снова висеть в процессах и мониторить программы. Цитата:
|
Цитата:
|
Цитата:
В последнем Вашем скрипте всё здорово. Единственное вот как уже говорил "если бы в код добавить проверку того что уже запущено, а не то что он сам сразу запускает". Мне б в полне этого хватило. Если можете, поправте его пожалуйста. Цитата:
|
Я, конечно, извиняюсь, но осмелюсь напомнить:
Цитата:
|
Цитата:
|
Iska, вроде бы правильно написал :)
|
Цитата:
|
Iska, понял, сорри. :)
Тут подумал, а что если добавить в Ваш текущий код скрипта это: Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate,(debug)}!\\.\root\CIMV2") If objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'notepad2.exe'").Count = 0 Then только не знаю в какую именно строчку впихнуть и в каком виде. Может это и будет проверкой процесса? |
Вечер добрый, пока пишется скрипт, можете его чуть чуть поменять чтобы он не постоянно висел в памяти, а запускался, проверял и выгружался?
|
Цитата:
Цитата:
Теперь сравнение будет идти по полному пути к исполняемому файлу. |
Iska, замечательно, спасибо большое. То, что нужно.
|
Время: 03:34. |
Время: 03:34.
© OSzone.net 2001-