【问题标题】:How long has Windows 7 been locked?Windows 7 锁定了多长时间?
【发布时间】:2015-03-09 16:56:51
【问题描述】:

有没有办法以编程方式(批处理文件、VBS)或通过第 3 方工具找出工作站已锁定多长时间(使用 Win+L 快捷方式)?脚本或第 3 方工具的输出应该是 f.e. 60 分钟,如果工作站在 60 分钟后被锁定。

谢谢!

【问题讨论】:

  • 你能说清楚一点吗?您想知道我们是否可以关闭计算机?
  • 我已经修改了这个问题。不,脚本不应关闭计算机。我只想知道工作站已经锁定了多长时间。

标签: batch-file vbscript windows-7


【解决方案1】:

您可以使用此 VBScript 来了解工作站是否已锁定。如果是,则从锁定时间开始。 该脚本将检查工作站锁定时创建的进程LogonUI.exe,并获取该进程的创建日期。

Dim strReturn : strReturn = "."
Dim computer : computer = "."
If WScript.Arguments.Count = 1 Then
    computer = WScript.Arguments(0)
End If

Function WMIDateStringToDate(dtmStart)
    WMIDateStringToDate = CDate(Mid(dtmStart, 5, 2) & "/" & _
    Mid(dtmStart, 7, 2) & "/" & Left(dtmStart, 4) _
    & " " & Mid (dtmStart, 9, 2) & ":" & _
    Mid(dtmStart, 11, 2) & ":" & Mid(dtmStart, 13, 2))
End Function

Function IsWorkstationLocked( computer )
    Dim wmi : Set wmi = GetObject("winmgmts://" & computer & "/root/cimv2")
    Dim logonScreenCount
    Set logonScreenCount = wmi.ExecQuery ("SELECT * FROM Win32_Process WHERE Name = 'LogonUI.exe'")
    for each xxx in logonScreenCount
        StartTime = xxx.CreationDate
        strReturn = WMIDateStringToDate(StartTime)
        creationTime = xxx.CreationDate
        Next
    IsWorkstationLocked = (logonScreenCount.Count > 0)
End Function

If IsWorkstationLocked(computer) Then
    Wscript.Echo "locked since " & strReturn
Else
    Wscript.Echo "not locked"
End If

HTH!

【讨论】:

  • 嗨!非常感谢。但是如果工作站被锁定,我该如何调用脚本呢?
  • 您可以在参数中远程传递计算机名称并检查。
  • 或者,您可以在while循环中使用相同的逻辑(如事件监听器)并使其记录工作站锁定的时间..
  • 嗯。我不让它以计算机名称运行。我正在尝试从与锁定工作站位于同一网络的不同工作站运行您的脚本。对于计算机名称,我已通过锁定工作站的主机名。但这不起作用。我收到一条错误消息“远程服务器机器不存在或不可用:'GetObject'。
  • 我已经根据here修改了代码并调整了格式。在远程机器上,必须启用 RemoteAdmin 服务。
猜你喜欢
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
相关资源
最近更新 更多