VBScript - Как мне узнать, находится ли удаленная рабочая станция на экране входа?
VBScript - Как мне узнать, находится ли удаленная рабочая станция на экране входа? Я знаю, как определить, вошел ли на компьютере активный пользователь или нет. Если компьютер находится на экране входа в систему, этот сценарий скажет, что ни один пользователь не вошел в систему. Однако сценарий "Пользователь вошел в систему" может также сообщить "Ни один пользователь не вошел в систему" при загрузке сценариев запуска. Мне также не нужно знать, заблокирована ли рабочая станция. Есть ли способ определить, запрашивает ли компьютер конкретные учетные данные для входа в систему или говорит "Нажмите CTRL+ALT+DEL для входа"?
Я искал лучшее, что я знаю, и безуспешно пытался до сих пор.
Любая помощь высоко ценится!
2 ответа
Вы можете попробовать комбинацию Win32_Process
а также Win32_LogonSession
,
computer = "..."
Set wmi = GetObject("winmgmts://" & computer & "/root/cimv2")
logonScreenCount = wmi.ExecQuery _
("SELECT * FROM Win32_Process WHERE Name = 'LogonUI.exe'").Count
interactiveUserCount = wmi.ExecQuery _
("SELECT * FROM Win32_LogonSession WHERE LogonType = 2").Count
If logonScreenCount = 1 And interactiveUserCount = 0 Then
WScript.Echo "Logon screen is being displayed"
End If
Запрос против Win32_Process
проверяет, запущен ли процесс входа в систему, запрос Win32_LogonSession
проверяет, вошел ли пользователь в систему в интерактивном режиме. Некоторые возможные комбинации:
logonScreenCount = 0, interactiveUserCount = 0:
Система, вероятно, не завершила загрузку (нет экрана входа в систему и интерактивного входа в систему).logonScreenCount = 1, interactiveUserCount = 0:
Система работает, отображается экран входа в систему, но ни один пользователь не вошел в систему.logonScreenCount = 0, interactiveUserCount = 1:
Система работает, пользователь вошел в систему на консоли.
Обратите внимание, что повторные запросы не будут получать изменения. Ты должен бежать GetObject()
снова, чтобы обновить объект WMI.
Также обратите внимание, что приведенный выше фрагмент кода не обрабатывает ошибки, такие как RPC-сервер на удаленном хосте, недоступный во время загрузки системы.
Возможно, вы захотите проверить следующее сообщение Обнаружение того, виден ли экран входа в Windows для пользователя в VB.NET
Я знаю, что это не совсем то, что вы спрашиваете, но один из ответов содержит ссылку на статью MSDN, в которой описывается WTSRegisterSessionNotification, которая может позволить вам создать механизм, который приблизит вас.