Скрипт vbs выводящий список терминальных сессий RDP
Этот скрипт показывает список активных и неактивных пользователей удаленного рабочего стола, зашедших на компьютер через удаленный доступ RDP.
Если пользователь вышел из из удаленного доступа не завершив терминальную сессию - он все равно будет присутствовать в списке.
Скрипт не показывает локального пользователя, - только тех кто зашел по RDP.
Скрипт может быть полезен например для автоматического бэкапа, который перед запуском будет проверять - нет ли на компьютере сессий удаленных пользователей, и в соответствии с этим запускать или не запускать бэкап (бывают ситуации когда в терминальной сессии выполняется какая-то ресурсоемкая операция и нагружать при этом компьютер дополнительными операциями бэкапа не желательно).
У этого скрипта есть одна особенность - когда пользователь завершает сессию (а не просто закрывает), то иногда проходит около минуты, прежде чем скрипт перестанет его показывать в своем списке.
Скрипт vbs - список активных и не активных терминальных сессий
Пользователь завершивший сессию (а не просто закрывший) пропадает из списка иногда не сразу - бывает, что еще примерно около минуты он присутствует в списке.
Пользователь закрывший RDP сессию удаленного доступа (но не завершивший ее) будет оставаться в списке . Таким образом можно запустить ресурсоемкую задачу, закрыть RDP сессию, и при этом заранее настроить например скрипт автоматического бэкапа так, чтобы он проверял перед запуском нет ли терминальных сессий (активных и неактивных), чтобы не нагружать дополнительно своим запуском компьютер.
ВАЖНО Скрипт возвращает "0" (в кавычках), если удаленных сессий нет. Кавычки использованы для того, что бы в bat-файлах было проще сравнивать строки.
Запускать в консоли можно так: cscript //NoLogo "C:\_ПУТЬ_\rdp_logon_list.vbs"
rdp_logon_list.vbs
On Error Resume Next Dim strComputer, ic strComputer = "." ic = 0 Set objWMI = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colSessions = objWMI.ExecQuery ("Select * from Win32_LogonSession Where LogonType = 10") If colSessions.Count = 0 Then ' Wscript.Echo "No interactive users found" Else WScript.Echo vbCrLf & Date() & " " & Time() WScript.Echo "RDP Sessions:" For Each objSession in colSessions Set colList = objWMI.ExecQuery("Associators of " _ & "{Win32_LogonSession.LogonId=" & objSession.LogonId & "} " _ & "Where AssocClass=Win32_LoggedOnUser Role=Dependent" ) For Each objItem in colList WScript.Echo "Username: " & objItem.Name & " FullName: " & objItem.FullName ic = ic + 1 Next Next End If If (ic = 0) Then WScript.Echo "0" End If
Пример того, как можно в скрипте bat использовать результат "rdp_logon_list.vbs":
(скрипт запускает WinRar, но только если нет RDP-сессий)
rar_if_not_rdp.bat
Оставьте комментарий
Вы можете войти под своим логином или зарегистрироваться на сайте.