PDA

Показать полную графическую версию : [решено] [решено] VBS: мониторинг процессов и уведомление на email


Страниц : 1 [2]

Iska
01-12-2013, 16:35
А с Вашими приложениями добавленная пауза не помогла?

novi
01-12-2013, 16:42
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
и т.д.

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

Iska
04-12-2013, 06:25
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
04-12-2013, 15:06
Вы не будете сами запускать приложения. Понимаете? Не будете. Этим будет заниматься сам скрипт. »
Как бы правильнее сказать, изредка нужно будет выключить программу ненадолго, на пару минут (это время может быть как чуть больше так и чуть меньше, во общем есть причины), и снова запустить. Ваш код скрипта это не позволит сделать, т.к. сразу будет снова запуск приложения.
Походу Вашего создания скрипта, я его рассматривал, как добавку к своему стартовому скрипту приложений.

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

несколько строк вызова других программ (они запускаются единожды и не требуют вмешательства), не относящихся к скрипту.
и далее сам вызов моих программ которые будут указаны в скрипте.
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
04-12-2013, 15:40
Как бы правильнее сказать, изредка нужно будет выключить программу ненадолго, на пару минут (это время может быть как чуть больше так и чуть меньше, во общем есть причины), и снова запустить. Ваш код скрипта это не позволит сделать, т.к. сразу будет снова запуск приложения. »
Естественно — это входит в явное противоречие с мониторингом. Просто так «снимать»/запускать скрипт нецелесообразно — подписка-то останется, сервер Wbem будет всё более и более нагружаться. Надо подумать. Вам явно какой-нибудь GUI нужен с ручным управлением сим процессом. Что у Вас есть? .Net есть? PowerShell есть?

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

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

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

novi
05-12-2013, 10:45
Что у Вас есть? .Net есть? PowerShell есть? » »
.Net есть, powershell тоже.

novi
09-12-2013, 18:43
Iska, вроде бы правильно написал :)

Iska
09-12-2013, 21:41
Iska, вроде бы правильно написал »
Вижу ;). Рисование и отладка интерфейса на PowerShell весьма неспешное дело. Скоро точно не ждите.

novi
09-12-2013, 22:14
Iska, понял, сорри. :)
Тут подумал, а что если добавить в Ваш текущий код скрипта
это:

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate,(debug)}!\\.\root\CIMV2")
If objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'notepad2.exe'").Count = 0 Then

только не знаю в какую именно строчку впихнуть и в каком виде.
Может это и будет проверкой процесса?

novi
16-01-2014, 20:25
Вечер добрый, пока пишется скрипт, можете его чуть чуть поменять чтобы он не постоянно висел в памяти, а запускался, проверял и выгружался?

Iska
16-01-2014, 23:34
пока пишется скрипт, »
Увы, не пишется скрипт. Никак не пишется :(. Visual Studio я, оказывается, давно уже удалил, а для PowerShell пока катастрофически не хватает знаний.

можете его чуть чуть поменять чтобы он не постоянно висел в памяти, а запускался, проверял и выгружался? »
Пробуйте:
Option Explicit

Const cdoSendUsingPort = 2
Const cdoBasic = 1

Const strSchema = "http://schemas.microsoft.com/cdo/configuration/"

Const SW_SHOWMINIMIZED = 2
Const SW_SHOWMINNOACTIVE = 7


Dim arrProcesses

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx

Dim elem
Dim lngProcessID


arrProcesses = Array("C:\WINDOWS\system32\notepad.exe", "C:\WINDOWS\system32\calc.exe", "C:\WINDOWS\system32\mspaint.exe")

strComputer = "."

Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")

Set objSWbemObjectEx = objSWbemServicesEx.Get("Win32_ProcessStartup").SpawnInstance_
objSWbemObjectEx.ShowWindow = SW_SHOWMINNOACTIVE

For Each elem In arrProcesses
If objSWbemServicesEx.ExecQuery("SELECT ExecutablePath FROM Win32_Process WHERE ExecutablePath = '" & Replace(elem, "\", "\\") & "'").Count = 0 Then
With WScript.CreateObject("CDO.Message")
.From = "windows@myservermail.ru"
.To = "мой-емейл@myservermail.ru"
.Subject = "Process [" & elem & "] closed."

If objSWbemServicesEx.Get("Win32_Process").Create(elem, WScript.CreateObject("Scripting.FileSystemObject").GetParentFolderName(elem), objSWbemObjectEx, lngProcessID) = 0 Then
.Textbody = Now() & vbTab & "Process [" & elem & "] successfully started."
Else
.Textbody = Now() & vbTab & "Can't create process [" & elem & "]."
End If

With .Configuration.Fields
.Item(strSchema & "smtpserver") = "mx.myservermail.ru"
.Item(strSchema & "sendusing") = cdoSendUsingPort
.Item(strSchema & "smtpserverport") = 25

.Update
End With

.Send
End With
End If
Next

Set objSWbemObjectEx = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator = Nothing

WScript.Quit 0
Теперь сравнение будет идти по полному пути к исполняемому файлу.

novi
17-01-2014, 21:46
Iska, замечательно, спасибо большое. То, что нужно.




© OSzone.net 2001-2012