1 (изменено: Poltergeyst, 2011-10-07 20:53:01)

Тема: VBS: Не работает подписка на события WMI

Нижеуказанный код постоянной подписки на событие WMI использует в качестве потребителя CommandLineEventConsumer.

VBScript:

Set objService = GetObject("WINMGMTS:{impersonationLevel=Impersonate}!\\.\ROOT\CIMV2")

'/Создание фильтра событий(вставка USB-накопителя)/
'---------------------------------------------------------------------------
Set objFilter = objService.Get("__EventFilter").SpawnInstance_()

With objFilter
    .Name = "MyEvent"
    .QueryLanguage = "WQL"
    .EventNamespace = "ROOT\CIMV2"
    .Query = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_LogicalDisk' AND TargetInstance.DriveType=2"
    Set objFilterPath = .Put_()
    .Put_()
End With


'/Потребитель событий/
'---------------------------------------------------------------------------
Set objConsumer = objService.Get("CommandLineEventConsumer").SpawnInstance_()

With objConsumer
    .Name = "MyEventCallback"
    .CommandLineTemplate = "cmd.exe /c calc"
    .RunInteractively = True
    .WorkingDirectory = "C:\WINDOWS\SYSTEM32\"
    Set objConsumerPath = .Put_()
End With

'/Связка фильтра и потребителя/
'---------------------------------------------------------------------------
Set objBinding = objService.Get("__FilterToConsumerBinding").SpawnInstance_()

With objBinding
    .Filter = objFilterPath
    .Consumer = objConsumerPath
    .Put_()
End With

MsgBox "Подписка" & vbCRLF & _
    objFilterPath.Path & vbCRLF & _
    objConsumerPath.Path, vbSystemModal + vbInformation, "Subscribe"

При возникновении события вставки USB-flash накопителя должен создаваться новый процесс прописанный в параметрах экземпляра CommandLineEventConsumer. Однако ничего не работает, а в протокол выводится следующее:

wbemcore.log

GetUserDefaultLCID failed, restorting to system verion

wbemess.log

Could not determine logged on user
Failed to CreateProcess cmd.exe /c calc. Error 0x80041001
Dropping event destined for event consumer CommandLineEventConsumer="MyEventCallback" in namespace //./root/CIMV2
Failed to deliver an event to event consumer CommandLineEventConsumer="MyEventCallback" with error code 0x80041001. Dropping event.

В системе под учетной записью администратора, WinXP. Файлы scrcons.mof, wbemcons.mof - скомпиллированы.

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

2

Re: VBS: Не работает подписка на события WMI

Здесь посмотрите про USB , "событие вставки USB-flash накопителя" успешно ловится.

3 (изменено: dab00, 2011-10-08 09:31:59)

Re: VBS: Не работает подписка на события WMI

Вот так можно:

Set objWMI = GetObject("winmgmts:\\.\Root\CIMV2")
'собираем запрос, WITHIN 2 - интервал повторения запроса в секундах
    Set colMonEvents = objWMI.ExecNotificationQuery("SELECT * FROM __InstanceCreationEvent " _
            & "WITHIN 2 WHERE Targetinstance ISA 'Win32_DiskDrive' and TargetInstance.InterfaceType = 'USB'")     
    Do 'зацикливаем на заявленный интервал
        Set objLatestEvent = colMonEvents.NextEvent
        MsgBox "Here I go!"        
    Loop

4

Re: VBS: Не работает подписка на события WMI

dab00 пишет:

Вот так можно:

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

5

Re: VBS: Не работает подписка на события WMI

Poltergeyst пишет:

Возможно, сложность проявляется в каких-то настройках безопасности, вот не могу понять в каких.

По этому вопросу есть пост на этом форуме.

6 (изменено: Poltergeyst, 2011-10-08 14:16:19)

Re: VBS: Не работает подписка на события WMI

dab00 пишет:

пост на этом форуме.

Про пост знаю, применил несколько рецептов, даже переустановил WMI, как рекомендовано Евген.  Брандмауэр отключен, скрипт должен выполняться на локальной машине - все равно не работает. Похоже загвоздка в разрешениях провайдера CommandLineEventConsumer, потому что провайдер LogFileEventConsumer работает как ему и положено. А вот как настроить систему, чтобы "освободить" CommandLineEventConsumer, мне неясно.

7

Re: VBS: Не работает подписка на события WMI

Попробуй этот скрипт. Исходник не выкладываю - 30000 строчек .