Страница 1 из 1

VBScript: разное поведение под Win2000 и WinXP

Добавлено: 18 апр 2006, 10:17
Student
Всем привет!

Есть следующий фрагмент сценария:

Do While strUserDisplayName = "No User Logged In"
Set colUsers = objWMIService.ExecQuery("SELECT * FROM _ Win32_LogonSession")
For Each objLogonSession In colUsers
If objLogonSession.LogonType = 2 Then
Set colUsers = objWMIService.ExecQuery("SELECT * FROM _ Win32_ComputerSystem")

Под WinXP исполняется нормально, под Win2000 выдаёт ошибку пустого множества в строке определения цикла. Модифицируем:

Do While strUserDisplayName = "No User Logged In"
Set colUsers = objWMIService.ExecQuery("SELECT * FROM _ Win32_LogonSession")
If colUsers.Count > 0 Then
For Each objLogonSession In colUsers
If objLogonSession.LogonType = 2 Then
Set colUsers = objWMIService.ExecQuery("SELECT * FROM _ Win32_ComputerSystem")

Под WinXP исполняется нормально, под Win2000 выдаёт неопределённую ошибку 80004005 в строке проверки условия.

Есть идеи, как исключить ошибку? Использование On Error Resume Next просьба не предлагать.

С уважением,
Student

P.S. Ошибка проявляется только при исполнении сценария от учётной записи системы в тот момент, когда ни один пользователь не вошёл в систему интерактивно.

Добавлено: 18 апр 2006, 11:31
Student
Отбой воздушной тревоги - как выяснилось, в Win2000 нет WMI-класса Win32_LogonSession. Печально.

Добавлено: 18 апр 2006, 13:22
Student
Однако, возникла следующая проблема: Win2000 при обработке сценария при запуске системы (берётся из доменной политики для компьютера - не пользователя!) странно реагирует на цикл, ждущий появления значения. Система не отображает диалог входа в систему, пока сценарий не отваливается по какой-то причине (видимо, переполнение при постоянной прокрутке цикла или тайм-аут). Применение WScript.Sleep не помогает и приводит лишь к снижению нагрузки на процессор в паузах между прокрутками цикла.
Немного облегчает ситуацию установка асинхронного выполнения сценария - но это не выход, так как при этом возникает дополнительная проблема со сбросом выполнения сценария в случае, если вход пользователя начат раньше, чем запущен сценарий.
Может ли кто-нибудь объяснить причину столь странного поведения Win2000 и предложить методы обхода этой странности?