Ошибка WMI через некоторое время - PullRequest
0 голосов
/ 20 марта 2009

У меня есть интересная / раздражающая проблема с некоторыми VBScripts, работающими на Windows 2003 Server (они отлично работают на XP).

Сценарии в основном периодически вызывают объекты WMI для извлечения информации о производительности и записи ее в файл журнала. Он запускается запланированными задачами в 12:05 каждое утро и работает до полуночи (или будет, если он не продолжит падать). Он принадлежит Администратору, и задача: "cscript xx.vbs blah blah blah".

Иногда он работает часами, иногда всего несколько минут. Звонки имеют вид:

set objWMI = getObject("winmgmts:\\.\root\cimv2")
:   :   :
do lots of times:
    set itemCpu = wmi.get("Win32_PerfRawData_PerfOS_Processor.Name='_Total'")

Ошибка, с которой он возвращается, - это диалоговое окно, в котором говорится, что удаленный вызов процедуры не был выполнен, но нет дополнительной информации (он дает 32-битное шестнадцатеричное число, и я обновлю этот вопрос в следующий раз, когда это произойдет, но мои поиски в Google показали очень общие страницы, поэтому я не уверен, что код поможет).

Он также использовался для сбоя (та же ошибка) со следующей строкой, но я не видел проблемы с этой строкой, поскольку я изменил ее на использование Win32_Perf Raw Data_PerfOS_Memory.

set colMem = wmi.execQuery("select AvailableKBytes" & _
    " from Win32_PerfFormattedData_PerfOS_Memory",,48)

Я понял, что это не связано с сетью, поскольку оно на той же машине.

Я также пытался установить objWMI в ноль и каждый раз выполнять другой цикл getObject, но это не помогло.

Еще одна возможная проблема, она на самом деле работает внутри VMWare Workstation (но так же, как и с XP) - на следующей неделе я получу установку Win2k3 на физическом ПК, чтобы протестировать ее там.

Странно то, что иногда он часами работает без проблем, собирая данные и отправляя их в файл журнала. В других случаях он падает через десять минут.

Есть идеи от гуру Windows среди нас?

UPDATE:

Хорошо, наконец-то снова не получилось. Вот мое небольшое усилие при захвате экрана:

+-------------------------------------------------+ | Windows Script Host |X| +-------------------------------------------------+ | / Script: C:\Program Files\blah\blah.vbs | | /\ Line: 271 | | Char: 2 | | Error: The remote procedure call | | failed and did not execute. | | Code: 800706BF | | Source: SWbemServicesEx | +-------------------------------------------------+

Строка 271:

set itemCpu = wmi.get("Win32_PerfRawData_PerfOS_Processor.Name='_Total'")

с wmi, предварительно установленным с:

set wmi = getObject("winmgmts:\\.\root\cimv2")

(это постоянно воссоздается внутри цикла, поэтому я не думаю, что это проблема с устаревшим соединением RPC).

Ответы [ 2 ]

1 голос
/ 23 марта 2009

Если ваш скрипт проверяет какие-либо учетные записи пользователей при запуске, взгляните на это исправление. Это проблема только 2003 года, которая может объяснить, почему она работает нормально в вашей системе XP.

http://support.microsoft.com/kb/933593

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

1 голос
/ 23 марта 2009

Ошибка 1722 (0x6BF): сервер RPC недоступен.

Один совет: освободите все объекты явно в вашем скрипте

Чтобы выполнить лучшую диагностику, попробуйте прослушать вашу сеть с помощью Microsoft Network Monitor 3.2 и найдите проблему (см. Эту справку Как перехватить сетевой трафик с помощью Network Monitor )

Хорошо выглядишь.

...