Login VBScript-如何判断远程工作站是否位于登录屏幕上?

Login VBScript-如何判断远程工作站是否位于登录屏幕上?,login,vbscript,wmi,logged,Login,Vbscript,Wmi,Logged,VBScript-如何判断远程工作站是否位于登录屏幕上?我知道如何判断计算机是否有活动用户登录。如果计算机在登录屏幕上,该脚本将显示没有用户登录。但是,“登录用户”脚本也可以在加载启动脚本时报告“没有用户登录”。我也不需要知道工作站是否被锁定。有没有办法确定计算机是否特别提示输入登录凭据或说“按CTRL+ALT+DEL登录” 我已经尽了我所知的最大努力,到目前为止我的尝试都没有成功 非常感谢您的帮助 您可能想查看以下帖子 我知道这并不完全是你所问的,但其中一个答案提供了一个指向MSDN文章的链

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

我已经尽了我所知的最大努力,到目前为止我的尝试都没有成功


非常感谢您的帮助

您可能想查看以下帖子


我知道这并不完全是你所问的,但其中一个答案提供了一个指向MSDN文章的链接,该文章概述了WTSRegisterSessionNotification,这可以让你构建一种机制,让你接近它。

你可以尝试和的组合

Win32\u进程
的查询检查登录屏幕进程是否正在运行,对
Win32\u登录会话
的查询检查用户是否以交互方式登录。一些可能的组合是:

  • logonScreenCount=0,interactiveUserCount=0:
    系统可能尚未完成引导(没有登录屏幕和交互登录)

  • logonScreenCount=1,interactiveUserCount=0:
    系统已启动,正在显示登录屏幕,但没有用户登录

  • logonScreenCount=0,interactiveUserCount=1:
    系统已启动,用户已登录控制台

请注意,重复的查询不会获取更改。您必须再次运行
GetObject()
来更新WMI对象


另外请注意,上面的代码片段不会处理诸如远程主机上的RPC服务器在系统引导期间不可用之类的错误。

我很感谢您的快速注释标记,谢谢。不幸的是,这些会话通知没有任何声明“正在登录屏幕”的通知,只有在有人登录或注销时才有。虽然那篇文章确实指出,没有办法确定计算机是否被锁定,这可能就回答了我的问题。登录屏幕意味着计算机已有效锁定,但没有登录用户。不过我还没有完全放弃。很抱歉,这对我没什么帮助。。。祝你好运:D
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