2

VBScript - 如何判断远程工作站是否位于登录屏幕?我知道如何判断计算机是否有活动用户登录。如果计算机在登录屏幕,该脚本会说没有用户登录。但是“登录用户”脚本也可以在加载启动脚本时报告“没有用户登录”。我也不需要知道工作站是否已锁定。有什么方法可以确定计算机是专门提示输入登录凭据还是说“按 CTRL+ALT+DEL 登录”?

我已经搜索了我所知道的最好的方法,但迄今为止我的尝试都没有成功。

任何帮助深表感谢!

4

2 回答 2

1

您可以尝试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 服务器在系统启动期间不可用之类的错误。

于 2012-11-06T13:16:03.690 回答
0

您可能需要查看以下帖子 检测 Windows 登录屏幕是否对 VB.NET 中的用户可见

我知道这不是您所要求的,但其中一个答案提供了指向 MSDN 文章的链接,该文章概述了 WTSRegisterSessionNotification,这可能允许您构建一种让您接近的机制。

于 2012-11-05T19:30:54.373 回答