Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] [решено] VBS: мониторинг процессов и уведомление на email

Ответить
Настройки темы
VBS/WSH/JS - [решено] [решено] VBS: мониторинг процессов и уведомление на email

Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: novi
Дата: 23-01-2014
Описание: Исправил ошибки
Форумчане, день добрый помогите допилить скрипт. Сам не силен.
Сам скрипт vbs

Назначение скрипта: мониторинг запущенных процессов указанных в коде, при отсутствии запущенного процесса, запускать его, и отправлять email.
читать дальше »

Код: Выделить весь код
Option Explicit
Dim objSWbemServicesEx
Dim intProcessID

Dim strSMTPServer
Dim strSmtpPort
Dim strSmtpAuth
Dim strSmtpSsl
Dim strDate
Dim strSendingEmail
Dim strReportEmail
Dim objMessage

rem Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2:Win32_Process")
rem Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate,(debug)}!\\.\root\CIMV2")
If objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'notepad1.exe'").Count = 0 Then
    If objSWbemServicesEx.Get("Win32_Process").Create("c:\programma\01\notepad1.exe", Null, intProcessID) = 0 Then
Call sendMail
    End If      
End If 

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate,(debug)}!\\.\root\CIMV2")
If objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'notepad2.exe'").Count = 0 Then
    If objSWbemServicesEx.Get("Win32_Process").Create("c:\programma\02\notepad2.exe", Null, intProcessID) = 0 Then
Call sendMail
    End If      
End If 

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate,(debug)}!\\.\root\CIMV2")
If objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'notepad3.exe'").Count = 0 Then
    If objSWbemServicesEx.Get("Win32_Process").Create("c:\programma\03\notepad3.exe", Null, intProcessID) = 0 Then
Call sendMail
    End If      
End If 

Function sendMail()
strSmtpServer="mx server" ' имя почтового сервера
strSmtpPort=25
strSmtpAuth="no"
strSmtpSsl="no"
strDate=date
strSendingEmail="mail" ' Имя отправителя
strReportEmail="mail" ' Имя получателя
'WScript.Echo logPath & "/backup" & strDate & ".html"
Set objMessage = CreateObject("CDO.Message")
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSmtpServer
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = strSmtpPort
If strSmtpAuth = "yes" Then
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 2 'use '2' for NTLM authentication
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = strSmtpUser
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = strSmtpPass
End If
If strSmtpSsl = "yes" Then
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
End If
objMessage.Configuration.Fields.Update
objMessage.Subject = "Notepad " & strDate & "."
objMessage.From = strSendingEmail
objMessage.To = strReportEmail
rem objMessage.HtmlBody = "Рестарт Notepad"
objMessage.TextBody = "Restart Notepad"
objMessage.Send
End Function

Программа 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"
Спасибо, что дочитали до сюда

Отправлено: 23:25, 17-11-2013

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


А с Вашими приложениями добавленная пауза не помогла?

Отправлено: 16:35, 01-12-2013 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


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
и т.д.

если бы в код добавить проверку того что уже запущено, а не то что он сам сразу запускает, думаю эти дубли бы не пошли.

Отправлено: 16:42, 01-12-2013 | #22


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


novi, я потерял нить обсуждения. Давайте, Вы всё-таки сначала ответите на вопрос:
Цитата Iska:
А с Вашими приложениями добавленная пауза не помогла? »
Цитата 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
и т.д.

если бы в код добавить проверку того что уже запущено, а не то что он сам сразу запускает, думаю эти дубли бы не пошли. »
Вы не будете сами запускать приложения. Понимаете? Не будете. Этим будет заниматься сам скрипт.

Отправлено: 06:25, 04-12-2013 | #23


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Вы не будете сами запускать приложения. Понимаете? Не будете. Этим будет заниматься сам скрипт. »
Как бы правильнее сказать, изредка нужно будет выключить программу ненадолго, на пару минут (это время может быть как чуть больше так и чуть меньше, во общем есть причины), и снова запустить. Ваш код скрипта это не позволит сделать, т.к. сразу будет снова запуск приложения.
Походу Вашего создания скрипта, я его рассматривал, как добавку к своему стартовому скрипту приложений.

Батник лежит в автозагрузке
Кода батника примерно следующий:

несколько строк вызова других программ (они запускаются единожды и не требуют вмешательства), не относящихся к скрипту.
и далее сам вызов моих программ которые будут указаны в скрипте.
cd C:\Prorgamma\myproject\01\
start project01.exe
timeout /t 10
cd C:\Prorgamma\myproject\02\
start project02.exe
timeout /t 10
и т.д.


и вот в конец этого батника хотел добавить вызов вашего скрипта. Я так думаю что будет логично.

Цитата Iska:
если бы в код добавить проверку того что уже запущено, а не то что он сам сразу запускает, думаю эти дубли бы не пошли. »
Поэтому имхо это нужно.

Т.е. получается следующим образом. Батник запускает программы из батника, и в самом конце батника строчка вызова vbs скрипта, который будет висеть и мониторить. Если будет нужда выключить одну из программ, я выгружаю скрипт vbs, закрываю нужную мне программу, делаю то что мне нужно. и потом запускаю vbs, который в свою очередь должен будет запустить программу которую я закрыл, и снова висеть в процессах и мониторить программы.

Цитата Iska:
Вы не будете сами запускать приложения. Понимаете? Не будете. Этим будет заниматься сам скрипт. »
А вот если в вкратце отвечать на этот вопрос, то буду, изредка, но буду.

Отправлено: 15:06, 04-12-2013 | #24


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата novi:
Как бы правильнее сказать, изредка нужно будет выключить программу ненадолго, на пару минут (это время может быть как чуть больше так и чуть меньше, во общем есть причины), и снова запустить. Ваш код скрипта это не позволит сделать, т.к. сразу будет снова запуск приложения. »
Естественно — это входит в явное противоречие с мониторингом. Просто так «снимать»/запускать скрипт нецелесообразно — подписка-то останется, сервер Wbem будет всё более и более нагружаться. Надо подумать. Вам явно какой-нибудь GUI нужен с ручным управлением сим процессом. Что у Вас есть? .Net есть? PowerShell есть?

Отправлено: 15:40, 04-12-2013 | #25


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Естественно — это входит в явное противоречие с мониторингом. »
Пусть так, согласен. Но тут главное как уже говорил именно мониторинг скриптом, потоянно он будет висеть в памяти, или запускаться по шелдуру, значение не имеет. Смысл в том если программа закрылась нужно чтобы она запустилась заново, ну соответственно уведомить о том что это процесс выполнился.
В последнем Вашем скрипте всё здорово. Единственное вот как уже говорил "если бы в код добавить проверку того что уже запущено, а не то что он сам сразу запускает". Мне б в полне этого хватило.
Если можете, поправте его пожалуйста.

Цитата Iska:
Просто так «снимать»/запускать скрипт нецелесообразно »
Ну тут уже на усмотрение владельца. Если есть нужда, то почему бы и не выгрузить. Как уже говорил, это нужно будет делать крайне редко.

Отправлено: 00:32, 05-12-2013 | #26


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Я, конечно, извиняюсь, но осмелюсь напомнить:
Цитата Iska:
Что у Вас есть? .Net есть? PowerShell есть? »

Отправлено: 08:46, 05-12-2013 | #27


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Что у Вас есть? .Net есть? PowerShell есть? » »
.Net есть, powershell тоже.

Отправлено: 10:45, 05-12-2013 | #28


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, вроде бы правильно написал

Отправлено: 18:43, 09-12-2013 | #29


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата novi:
Iska, вроде бы правильно написал »
Вижу . Рисование и отладка интерфейса на PowerShell весьма неспешное дело. Скоро точно не ждите.

Отправлено: 21:41, 09-12-2013 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] [решено] VBS: мониторинг процессов и уведомление на email

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Отправка скриншота на email andrew_gurylyov@vk Скриптовые языки администрирования Windows 22 23-02-2012 11:52
VBS/WSH/JS - Помогите редактировать Autorun_Disable.vbs на Autorun_Enable.vbs nod201 Скриптовые языки администрирования Windows 0 05-12-2009 05:44
выключение servera на email kurt17 Microsoft Windows NT/2000/2003 4 22-07-2009 07:27
Уведомление на e-mail GSVG О сайте и форуме 4 17-03-2007 09:37
Уведомление о e- mail на телефон Sherla Мобильные ОС, смартфоны и планшеты 5 28-07-2003 22:31




 
Переход