1

Тема: VBS: мониторинг процессов в taskManager

Добрый день, ищу способ как промониторить процессы, а не службы.
В случае если процесс не запущен запустить его, записав в лог и естественно отправив уведомление на почту. Но это ясно через Set objMessage = CreateObject("CDO.Message")
Лог файл можно через Set LogFile = fso.OpenTextFil (имя файла)

А вот как это все вместе связать?

И как быть с процессами?
По каждому процессу есть путь где он лежит, типа c:\папка\процесс.ехе
ПиДы естественно каждый раз меняются так что их мониторить смысла нет.

Примеров на форуме не нашел.
Любая помощь в пользу.

2

Re: VBS: мониторинг процессов в taskManager

cbh пишет:

... ищу способ как промониторить процессы, а не службы <...> Примеров на форуме не нашел.

Ищите темы по ключу Win32_Process

3 (изменено: cbh, 2011-02-16 17:38:57)

Re: VBS: мониторинг процессов в taskManager

Ищу, пока приходит в голову только мониторинг

Наверное плохо ищу...кусок:

strComputer = "."
arrTargetProcs = Array("process1.exe","process2.exe","process3.exe")
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process")
For Each objProcess in colProcesses
  For Each strTargetProc In arrTargetProcs
    If LCase(objProcess.Name) = LCase(strTargetProc) Then
    
   LogFile.WriteLine("Process exist")
     Else
     LogFile.WriteLine("Error")
      
     
    End If
  Next
Next

Но это совсем по деревянному. И почему-то еррор пишется не три раза, а черезчур уж много.

4

Re: VBS: мониторинг процессов в taskManager

cbh пишет:

...И почему-то еррор пишется не три раза, а черезчур уж много.

cbh,

а Вы посмотрите - для кого эти error пишутся.
Добавьте в вывод имя процесса:

    If LCase(objProcess.Name) = LCase(strTargetProc) Then
       LogFile.WriteLine(objProcess.Name & " Process exist")
    Else
       LogFile.WriteLine(objProcess.Name & " Error")
    End If

5

Re: VBS: мониторинг процессов в taskManager

Option Explicit

Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx

Dim strProcessName
Dim lngProcessId


strProcessName = "notepad.exe"

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set collSWbemObjectSet = objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '" & strProcessName & "'")

If collSWbemObjectSet.Count = 0 Then
    If objSWbemServicesEx.Get("Win32_Process").Create( _
        "C:\WINDOWS\system32\notepad.exe", _
        "C:\Temp", _
        Null, _
        lngProcessId _
    ) = 0 Then
        
        WScript.Echo "Process started successfully"
    Else
        WScript.Echo "Process started fail"
    End If
Else
    WScript.Echo "Process already running"
End If

Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing

WScript.Quit 0

6 (изменено: cbh, 2011-02-17 10:30:56)

Re: VBS: мониторинг процессов в taskManager

alexii,
спасибо за помощь, но отрабатывает в ноль, без ошибок. Просто ничего не происходит.
Покопался и нашел другой ваш код:

Option Explicit

Dim objSWbemServicesEx
Dim intProcessID

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

If objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'notepad.exe'").Count = 0 Then
    If objSWbemServicesEx.Get("Win32_Process").Create("C:\Windows\System32\Notepad.exe", Null, intProcessID) = 0 Then
        
        WScript.Echo "Process started successfully"
    Else
        WScript.Echo "Process started fail"
    End If
End If

WScript.Quit 0

Но он постоянно дает "Process started fail"

Как ни странно, отрабатывается олько вот такой простенький скрипт:

Set WshShell = Wscript.CreateObject("Wscript.Shell")
CmdLine = "C:\windows\notepad.exe"
Dim objSWbemServicesEx
Dim intProcessID

Set objSWbemServicesEx = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

If objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'notepad.exe'").Count = 0 Then
        WshShell.Run CmdLine, 1, False
Else    
        WScript.Quit 0 
End If
WScript.Quit 0

Надо думать.

7

Re: VBS: мониторинг процессов в taskManager

Зря с только мучался и писал скрипт для мониторинга служб, вот здесь в принципе готовое и изысканное решение.
http://www.script-coding.com/WMI_ServMon.html

В принципе нормально. Вот только процессов не хватает.
Логика скрипта то что доктор прописал.
1.Мониторинг
2.Если упало поднимаем                                           >>> Если нет просто продолжаем мониторить
3.Делаем запись в существующий лог файл
4 Отправляем письмо

Сейчас буду пытаться подцепить процессы в общую картину.

8 (изменено: Dmitrii, 2011-02-17 12:24:29)

Re: VBS: мониторинг процессов в taskManager

"Стряпал" я для себя когда-то нечто подобное. Вот оставшиеся черновики.

1. Перезапуск (НЕ В ИНТЕРАКТИВНОМ РЕЖИМЕ) процесса, если он остановлен.

Dim objWMI, objCollection, objInstance
Dim strComputer, strTemp, intErr, intProcID
Const strProcess = "process.exe"

strComputer = "station"
intErr = 0
If Connection(strComputer) Then
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set objCollection = objWMI.ExecQuery("SELECT Name FROM Win32_Process WHERE Name='" & strProcess & "'")
    If objCollection.Count = 0 Then
        Set objInstance = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
            strComputer & "\root\cimv2:Win32_Process")
        intErr = objInstance.Create(strProcess, null, null, intProcID)
        If intErr = 0 Then
            WScript.Echo "Процесс на станции " & UCase(strComputer) & " запущен. Его ID: " & intProcID
        Else
            WScript.Echo "Ошибка запуска процесса на станции " & UCase(strComputer) & ". Код ошибки: " & intErr
            WScript.Quit
        End If
    Else
        WScript.Echo "Процесс на станции " & UCase(strComputer) & " уже запущен."
    End If
    On Error Resume Next 
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set objCollection = objWMI.ExecNotificationQuery("SELECT * FROM __InstanceDeletionEvent " & _
        "WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name='" & strProcess & "'")
    If Err.Number = 0 Then
        Do
            Set objItem = objCollection.NextEvent
            If Err.Number = 0 Then
                strTemp = objItem.TargetInstance.Name
                If StrComp(strTemp, strProcess, vbTextCompare) = 0 Then
                    Set objInstance = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
                        strComputer & "\root\cimv2:Win32_Process")
                    intErr = objInstance.Create(strProcess, null, null, intProcID)
                    If intErr = 0 Then
                        WScript.Echo "Процесс на станции " & UCase(strComputer) & " перезапущен. Его ID: " & _
                            intProcID
                    Else
                        WScript.Echo "Ошибка запуска процесса на станции " & UCase(strComputer) & _
                            ". Код ошибки: " & intErr
                    End If
                End If
            Else
                WScript.Echo "Ошибка работы сценария для станциии " & UCase(strComputer) & vbNewLine & _
                    "Код ошибки: " & Err.Number & vbNewLine & Err.Description
                WScript.Quit
            End If
        Loop
    Else
        WScript.Echo "Ошибка работы сценария для станциии " & UCase(strComputer) & vbNewLine & _
            "Код ошибки: " & Err.Number & vbNewLine & Err.Description
        WScript.Quit
    End If
Else
    WScript.Echo "Станция " & UCase(strComputer) & " не отвечает."
End If

Function Connection(strWS)
Dim objCollection, objItem
On Error Resume Next
Set objCollection = GetObject("winmgmts:{impersonationLevel=impersonate}")._
    ExecQuery("SELECT * FROM Win32_PingStatus WHERE Address='" & strWS & "'")
For Each objItem In objCollection
    If IsNull(objItem.StatusCode) Or objItem.StatusCode <> 0 Then 
        Connection = False
    Else
        Connection = True
    End If
Next
End Function

2. Перезапуск (В ИНТЕРАКТИВНОМ РЕЖИМЕ) процесса, если он остановлен.

Dim objWMI, objCollection, objInstance
Dim strComputer, strTemp, intErr, intProcID
Dim strRunTime
Const strProcess = "process.exe"

strComputer = "station"
intErr = 0
intRestartTime = 1
If Connection(strComputer) Then
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set objCollection = objWMI.ExecQuery("SELECT Name FROM Win32_Process WHERE Name='" & strProcess & "'")
    If objCollection.Count = 0 Then
        Set objInstance = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
            strComputer & "\root\cimv2:Win32_ScheduledJob")
        strRunTime = "********" & Replace(Left(DateAdd("n", intRestartTime, Time), 8), ":", "") & ".000000+360"
        intErr = objInstance.Create(strProcess, strRunTime, False,,, True)
        Set objInstance = Nothing
        If intErr = 0 Then
            WScript.Echo "Задание на запуск процесса на станции " & UCase(strComputer) & " назначено."
        Else
            WScript.Echo "Ошибка назначения задания на запуск процесса на станции " & _
                UCase(strComputer) & ". Код ошибки: " & intErr
            Set objCollection = Nothing
            Set objWMI = Nothing
            WScript.Quit
        End If
    Else
        WScript.Echo "Процесс на станции " & UCase(strComputer) & " уже запущен."
    End If
    On Error Resume Next 
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set objCollection = objWMI.ExecNotificationQuery("SELECT * FROM __InstanceDeletionEvent " & _
        "WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name='" & strProcess & "'")
    If Err.Number = 0 Then
        Do
            Set objItem = objCollection.NextEvent
            If Err.Number = 0 Then
                strTemp = objItem.TargetInstance.Name
                If StrComp(strTemp, strProcess, vbTextCompare) = 0 Then
                    Set objInstance = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
                        strComputer & "\root\cimv2:Win32_ScheduledJob")
                    strRunTime = "********" & Replace(Left(DateAdd("n", intRestartTime, Time), 8), ":", "") & ".000000+360"
                    intErr = objInstance.Create(strProcess, strRunTime, False,,, True, intProcID)
                    Set objInstance = Nothing
                    If intErr = 0 Then
                        WScript.Echo "Задание на перезапуск процесса на станции " & UCase(strComputer) & _
                            " назначено."
                    Else
                        WScript.Echo "Ошибка назначения задания на перезапуск процесса на станции " & _
                            UCase(strComputer) & ". Код ошибки: " & intErr
                        Set objCollection = Nothing
                        Set objWMI = Nothing
                        WScript.Quit
                    End If
                End If
            Else
                WScript.Echo "Ошибка работы сценария для станциии " & UCase(strComputer) & vbNewLine & _
                    "Код ошибки: " & Err.Number & vbNewLine & Err.Description
                Set objCollection = Nothing
                Set objWMI = Nothing
                WScript.Quit
            End If
        Loop
    Else
        WScript.Echo "Ошибка работы сценария для станциии " & UCase(strComputer) & vbNewLine & _
            "Код ошибки: " & Err.Number & vbNewLine & Err.Description
        Set objCollection = Nothing
        Set objWMI = Nothing
        WScript.Quit
    End If
Else
    WScript.Echo "Станция " & UCase(strComputer) & " не отвечает."
End If

Function Connection(strWS)
Dim objCollection, objItem
On Error Resume Next
Set objCollection = GetObject("winmgmts:{impersonationLevel=impersonate}")._
    ExecQuery("SELECT * FROM Win32_PingStatus WHERE Address='" & strWS & "'")
For Each objItem In objCollection
    If IsNull(objItem.StatusCode) Or objItem.StatusCode <> 0 Then 
        Connection = False
    Else
        Connection = True
    End If
Next
Set objCollection = Nothing
End Function

Примечания для интерактивного варианта:
- обязательно надо учитывать часовой пояс и "зимнее"|"летнее" время (в черновике - "зимнее" для часового пояса Новосибирска);
- минимальный интервал времени, через который может быть перезапущен процесс, составляет 1 минуту.

9

Re: VBS: мониторинг процессов в taskManager

Уж больно код получился длиннющим, плюнул на это дело, и подошел с другой стороны.
Зарегестрировал процессы как службы с помощью srvany.exe.
Всем спасибо

10 (изменено: cbh, 2011-02-17 16:27:22)

Re: VBS: мониторинг процессов в taskManager

Поторопился я, со всеми службами и процессами разобрался.
А один очень хитрый джава процесс.
Надо его промониторить, и если его нет то запустить некий батник, это вроде получается:

rcomp = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & rcomp & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'джава.ехе'")
If colProcesses.Count = 0 Then
    Set objShell = WScript.CreateObject("WScript.Shell")
    objShell.Run("C:\Start.bat"), 1, True
Else
   
End If

А вот как это событие передать дальше? в письмо в котором уже передается состояние служб?

Sub sendMessage(runState, xDate, Named)
    On Error Resume Next
    Dim tempStr, objMessage, WshNetwork
    Set objMessage = CreateObject("CDO.Message")
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    'Проверка состояния сервисов
    Select Case runState
        Case 0
            tempStr = "был успешно запущен."
        Case Else
            tempStr = "запуск этого сервиса невозможен."
    End Select
    'Создание сообщения
    objMessage.To = ""
    objMessage.From = ""
    objMessage.Subject = "Automessage from"
    objMessage.TextBody = xDate & " cервис " & Named & " перешёл в состояние СТОП." & VbCrLf & Date & "   " & Time & " " & tempStr
    objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = ""
    objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    objMessage.Configuration.Fields.Update
    objMessage.Send
    If Err.Number <> 0 Then
        LogFile.WriteLine "Отправка письма невозможна по причине: " & Err.Description
        Err.Clear
    End If
    LogFile.WriteLine xDate & " cервис " & Named & " перешёл в состояние СТОП." & _
    VbCrLf & Date & "   " & Time & " " & tempStr
    LogFile.WriteLine
    Set objMessage = Nothing
    Set WshNetwork = Nothing    
End Sub

11 (изменено: cbh, 2011-02-21 11:10:05)

Re: VBS: мониторинг процессов в taskManager

Коммент удален.

12

Re: VBS: мониторинг процессов в taskManager

Не могу понять , что я делаю не так (кроме того, что чешу левое ухо правой рукой):

Dim objSink, fso, LogFile, objService, rComp, Service1, Service2
rComp = "." 
Service1 = "Jawa.exe"
Service2 = "Spooler" 
Set objSink = WScript.CreateObject("WbemScripting.SWbemSink","SINK_")
Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
Set LogFile = fso.OpenTextFile("C:\log.Log", 8, True)
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & rComp & "\root\cimv2")

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & rcomp & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'notepad.ехе'")

objService.ExecNotificationQueryAsync objSink, _
"Select * From __InstanceModificationEvent Within 15 Where TargetInstance ISA 'Win32_Service'"
Do 
    WScript.Sleep 1000
Loop

Sub SINK_OnObjectReady(objLatestEvent, objAsyncContext)
    Dim xDate
        If colProcesses.Count = 0 Then
              Set objShell = WScript.CreateObject("WScript.Shell")
              objShell.Run("C:\Start.bat"), 1, True
              xDate = Date & "   " & Time
              Call sendMessage(tcValue, xDate, Service1)
        Elseif LCase(objLatestEvent.TargetInstance.Name) = LCase(Service2) Then
        If objLatestEvent.TargetInstance.State = "Stopped" Then
              xDate = Date & "   " & Time
              tcValue = objLatestEvent.TargetInstance.StartService
              Call sendMessage(tcValue, xDate, Service2)
        End If
    End If
End sub

Все исполняется нормально, запись в лог,посылка сообщения на почту(эту часть кода вырезал), запуск батника. Но нет мониторинга процессов.
То есть батник исполняется независимо от того запущен notepad.ехе или нет
Прошу помочь разобраться.

13

Re: VBS: мониторинг процессов в taskManager

cbh пишет:

... нет мониторинга процессов...

Ваш сценарий следит за изменением (и только за изменением) состояния служб. Состояние списка процессов не обрабатывается вовсе.
Вопросы:
- за чем же всё-таки нужно следить: службами, процессами или за тем и другим сразу?
- почему Вы выбрали именно асинхронный вариант подписки на событие, а не синхронный?

14 (изменено: cbh, 2011-02-21 12:55:41)

Re: VBS: мониторинг процессов в taskManager

Добрый день, отвечаю по порядку:
1. В основном нужно следить за службами, и для этой задачи скрипт меня полность устраивает.
Но кроме служб, есть некий процесс. Отсуствие его в списке процессов означает, что некая аппликация либо не стартовала, либо стартовала неккоректно.
Поэтому нужно отслеживать этот процесс в списке процессов, и в случае его отсуствия, стартовать некий батник, в котором я прописал условия и атрибуты для старта.
Просто стартовать сам процесс недостаточно. Нужно именно через батник.

2.Можно в принципе и в синхронном, за основу я брал скрит http://www.script-coding.com/WMI_ServMon.html
В синхронном режиме исполнение скрипта не продолжится, пока некий метод не будет полностью выполнен.
А что есть принципиальная разница в моем случае? обьем данных то никакой.

Спасибо за интерес

15

Re: VBS: мониторинг процессов в taskManager

cbh пишет:

... нужно следить за службами <...> кроме служб, есть некий процесс <...> нужно отслеживать этот процесс в списке процессов, и в случае его отсуствия, стартовать некий батник...

Если за наличием процесса нужно именно следить, а не однократно проверять его существование, то для этой цели лучше создать отдельную подписку на событие.
К тому же, полагаю, реализовать два отдельных сценария-наблюдателя Вам будет проще, чем совместить всё "в одном флаконе" (впрочем, это мнение может быть и ошибочным).

cbh пишет:

... В синхронном режиме исполнение скрипта не продолжится, пока некий метод не будет полностью выполнен ...

Последствия этого ограничения легко минимизировать, запуская дополнительный сценарий как независимый процесс с аргументами (впрочем, допустимость такого алгоритма зависит от конкретной ситуации).

cbh пишет:

... есть принципиальная разница в моем случае?

О Вашем случае мне судить пока сложно, а вообще - есть. Синхронный способ и надёжнее, и безопаснее.

16

Re: VBS: мониторинг процессов в taskManager

Dmitrii пишет:
cbh пишет:

... нужно следить за службами <...> кроме служб, есть некий процесс <...> нужно отслеживать этот процесс в списке процессов, и в случае его отсуствия, стартовать некий батник...

Если за наличием процесса нужно именно следить, а не однократно проверять его существование, то для этой цели лучше создать отдельную подписку на событие.
К тому же, полагаю, реализовать два отдельных сценария-наблюдателя Вам будет проще, чем совместить всё "в одном флаконе" (впрочем, это мнение может быть

Согласен, два легче.
Проблема в том что я не знаю как подступиться к постоянному мониторингу процессов. Не подскажите?

17

Re: VBS: мониторинг процессов в taskManager

cbh пишет:

... не знаю как подступиться к постоянному мониторингу процессов. Не подскажите?

Уже подсказывал (сообщение #8 этой темы).

18 (изменено: cbh, 2011-02-22 10:42:02)

Re: VBS: мониторинг процессов в taskManager

1. Запуск процесса не в интерактивной форме. А коды ошибок какие? мне периодически выдается код ошибки 3. Запускаю под админом.

If Connection(strComputer) Then
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set objCollection = objWMI.ExecQuery("SELECT Name FROM Win32_Process WHERE Name='" & strProcess & "'")
    If objCollection.Count = 0 Then
        Set objInstance = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2:Win32_Process")
        intErr = objInstance.Create(strProcess, null, null, intProcID)
        If intErr = 0 Then
            WScript.Echo "Процесс на станции " & UCase(strComputer) & " запущен. Его ID: " & intProcID
        Else
            WScript.Echo "Ошибка запуска процесса на станции " & UCase(strComputer) & ". Код ошибки: " & intErr
            WScript.Quit
        End If

2. Запуск процесс в интерактивной форме
Я не совсем понял где и как задается время и пояс.

- минимальный интервал времени, через который может быть перезапущен процесс, составляет 1 минуту.

Отлично. как раз минута мне и нужна.

Но насколько я понял, этот скрипт не мониторит постоянно список процессов. А просто опрашивает по запуску.

19

Re: VBS: мониторинг процессов в taskManager

cbh пишет:

... А коды ошибок какие?..

Привыкайте пользоваться MSDN: http://msdn.microsoft.com/en-us/library … 85%29.aspx

cbh пишет:

... мне периодически выдается код ошибки 3...

Недостаточно полномочий. Почему - уже другой вопрос. Для его решения смотрите смежную тему: VBS: WMI на удаленном компьютере

cbh пишет:

... Запуск процесс в интерактивной форме
Я не совсем понял где и как задается время и пояс...

В примере - это константа +360 (время задано в формате UTC).

... минимальный интервал времени, через который может быть перезапущен процесс, составляет 1 минуту...

Прошу прощения за неточность. Здесь диапазон временной задержки может колебаться от 1 секунды до 1 минуты.

cbh пишет:

... насколько я понял, этот скрипт не мониторит постоянно список процессов. А просто опрашивает по запуску.

Неверно.
Опрос на наличие процесса выполняется только в первой части сценария - до оператора On Error Resume Next. Начиная с указанного оператора, следует часть, отвечающая именно за постоянное наблюдение (исключая функцию Connection()).

20 (изменено: cbh, 2011-02-23 11:10:48)

Re: VBS: мониторинг процессов в taskManager

Dmitrii пишет:
cbh пишет:

... мне периодически выдается код ошибки 3...

Недостаточно полномочий. Почему - уже другой вопрос. Для его решения смотрите смежную тему: VBS: WMI на удаленном компьютере

Спасибо, посмотрел. Во первых DCOM включен. Удаленный доступ тоже.
Во вторых я как бы запускаю скрипт только на локальной машине strComputer = "127.0.0.1"
В третьих, я не очень пока силен в ВБС, почему когда strComputer = "." скрипт усиленно старается найти хост "." и естественно потом выдает ошибку.
Вроде он должен понимать и работать локально, ведь значение "." означает что скрипт запускается на локальной машине?

21 (изменено: cbh, 2011-02-23 17:08:13)

Re: VBS: мониторинг процессов в taskManager

Разобрался запустил, скрипт не в интерактивном процессе
В моем случае помогла вот эта ссылка
http://social.technet.microsoft.com/For … 49c83f120c
С позволения автора немного изменил и добавил функционала в скрипт под свои нужды.
Спасибо

22

Re: VBS: мониторинг процессов в taskManager

Dmitrii может "В ИНТЕРАКТИВНОМ РЕЖИМЕ" вместо Win32_ScheduledJob Win32_BaseService?

    compname = ""
    strCommand = ""
Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate," _ 
    & "authenticationLevel=pktPrivacy}!" _ 
    & "\\" & compname & "\root\cimv2") 
    strName = "_strcmdfordel"
    Const OWN_PROCESS = 16
    Const NOT_INTERACTIVE = False
    Const NORMAL_ERROR_CONTROL = 2
    Set objService = objWMIService.Get("Win32_BaseService")
     errReturn = objService.Create(strName , strName, "" & strCommand & "", OWN_PROCESS, NORMAL_ERROR_CONTROL, "Manual",_
         NOT_INTERACTIVE, "LocalSystem", "Test service.")
    If errReturn = "0" Then
        Set colListOfServices = objWMIService.ExecQuery _
        ("Select * from Win32_Service Where Name = '"+strName+"'")
        For Each objService in colListOfServices
            objService.StartService()
            objService.Delete()
        Next
        WScript.Echo strName & " запуск выполнен"
    Else
        WScript.Echo  "Произошла ошибка в запуске: " & errReturn
    End If

По опыту надежнее

23 (изменено: Dmitrii, 2011-02-28 09:17:31)

Re: VBS: мониторинг процессов в taskManager

abasov пишет:

... может "В ИНТЕРАКТИВНОМ РЕЖИМЕ" вместо Win32_ScheduledJob Win32_BaseService?..

И такой способ позволит запустить, скажем, калькулятор или блокнот?

abasov пишет:

... По опыту надежнее

Хотелось бы увидеть какие-либо сравнительные данные, которые позволяют сделать такой вывод.