VBScript - 如何判断远程工作站是否位于登录屏幕?我知道如何判断计算机是否有活动用户登录。如果计算机在登录屏幕,该脚本会说没有用户登录。但是“登录用户”脚本也可以在加载启动脚本时报告“没有用户登录”。我也不需要知道工作站是否已锁定。有什么方法可以确定计算机是专门提示输入登录凭据还是说“按 CTRL+ALT+DEL 登录”?
我已经搜索了我所知道的最好的方法,但迄今为止我的尝试都没有成功。
任何帮助深表感谢!
您可以尝试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,这可能允许您构建一种让您接近的机制。