Показать полную графическую версию : [решено] [решено] VBS: мониторинг процессов и уведомление на email
А с Вашими приложениями добавленная пауза не помогла?
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, я потерял нить обсуждения. Давайте, Вы всё-таки сначала ответите на вопрос:
А с Вашими приложениями добавленная пауза не помогла? »
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
и т.д.
если бы в код добавить проверку того что уже запущено, а не то что он сам сразу запускает, думаю эти дубли бы не пошли. »
Вы не будете сами запускать приложения. Понимаете? Не будете. Этим будет заниматься сам скрипт.
Вы не будете сами запускать приложения. Понимаете? Не будете. Этим будет заниматься сам скрипт. »
Как бы правильнее сказать, изредка нужно будет выключить программу ненадолго, на пару минут (это время может быть как чуть больше так и чуть меньше, во общем есть причины), и снова запустить. Ваш код скрипта это не позволит сделать, т.к. сразу будет снова запуск приложения.
Походу Вашего создания скрипта, я его рассматривал, как добавку к своему стартовому скрипту приложений.
Батник лежит в автозагрузке
Кода батника примерно следующий:
несколько строк вызова других программ (они запускаются единожды и не требуют вмешательства), не относящихся к скрипту.
и далее сам вызов моих программ которые будут указаны в скрипте.
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, который в свою очередь должен будет запустить программу которую я закрыл, и снова висеть в процессах и мониторить программы.
Вы не будете сами запускать приложения. Понимаете? Не будете. Этим будет заниматься сам скрипт. »
А вот если в вкратце отвечать на этот вопрос, то буду, изредка, но буду.
Как бы правильнее сказать, изредка нужно будет выключить программу ненадолго, на пару минут (это время может быть как чуть больше так и чуть меньше, во общем есть причины), и снова запустить. Ваш код скрипта это не позволит сделать, т.к. сразу будет снова запуск приложения. »
Естественно — это входит в явное противоречие с мониторингом. Просто так «снимать»/запускать скрипт нецелесообразно — подписка-то останется, сервер Wbem будет всё более и более нагружаться. Надо подумать. Вам явно какой-нибудь GUI нужен с ручным управлением сим процессом. Что у Вас есть? .Net есть? PowerShell есть?
Естественно — это входит в явное противоречие с мониторингом. »
Пусть так, согласен. Но тут главное как уже говорил именно мониторинг скриптом, потоянно он будет висеть в памяти, или запускаться по шелдуру, значение не имеет. Смысл в том если программа закрылась нужно чтобы она запустилась заново, ну соответственно уведомить о том что это процесс выполнился.
В последнем Вашем скрипте всё здорово. Единственное вот как уже говорил "если бы в код добавить проверку того что уже запущено, а не то что он сам сразу запускает". Мне б в полне этого хватило.
Если можете, поправте его пожалуйста.
Просто так «снимать»/запускать скрипт нецелесообразно »
Ну тут уже на усмотрение владельца. Если есть нужда, то почему бы и не выгрузить. Как уже говорил, это нужно будет делать крайне редко.
Я, конечно, извиняюсь, но осмелюсь напомнить:
Что у Вас есть? .Net есть? PowerShell есть? »
Что у Вас есть? .Net есть? PowerShell есть? » »
.Net есть, powershell тоже.
Iska, вроде бы правильно написал :)
Iska, вроде бы правильно написал »
Вижу ;). Рисование и отладка интерфейса на PowerShell весьма неспешное дело. Скоро точно не ждите.
Iska, понял, сорри. :)
Тут подумал, а что если добавить в Ваш текущий код скрипта
это:
Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate,(debug)}!\\.\root\CIMV2")
If objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'notepad2.exe'").Count = 0 Then
только не знаю в какую именно строчку впихнуть и в каком виде.
Может это и будет проверкой процесса?
Вечер добрый, пока пишется скрипт, можете его чуть чуть поменять чтобы он не постоянно висел в памяти, а запускался, проверял и выгружался?
пока пишется скрипт, »
Увы, не пишется скрипт. Никак не пишется :(. 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
Теперь сравнение будет идти по полному пути к исполняемому файлу.
Iska, замечательно, спасибо большое. То, что нужно.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC