查询多个用户的上次登录日期

时间:2012-04-02 11:01:35

标签: vbscript wmi wmi-query

我编写的脚本需要在多个域用户上次登录计算机时进行查询。我以为我可以使用\ docs和settings \ username的最后访问日期来完成它,但我们的备份工具破坏了该计划。

然后我查看了使用WMI_UserProfile,但只查询本地配置文件。这导致我进入WNI_NetworkLoginProfile但我似乎只能获得登录用户的登录日期。是否可以使用WNI_NetworkLoginProfile查询多个用户的上次登录日期,还是可以查询其他内容?

On Error Resume Next

Set WshNetwork = CreateObject("Wscript.Network")
strComputer = WshNetwork.ComputerName

strDayOfMonth = Right("0" & Day(Date()),2)
strMonth = Right("0" & Month(Date()),2)
strYear = Right (Year(Date()),4)
strDate = strDayOfMonth & "/" & strMonth & "/" & strYear

oLast = DateAdd("d", -60, strDate)

Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Global = True   
objRegEx.IgnoreCase = True
objRegEx.Pattern = "NT AUTHORITY\SYSTEM|NT AUTHORITY\SYSTEM|NT AUTHORITY\LOCAL SERVICE|NT AUTHORITY\NETWORK SERVICE"

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkLoginProfile")

For Each objItem in colItems
dtmAccessTime = objItem.LastLogon
strReturn = WMIDateStringToDate(dtmAccessTime)
strUsers = objItem.Name
Set colMatches = objRegEx.Execute(strUsers)
If colMatches.Count < 1 Then
    strfolder = objFolder.Name
    Wscript.Echo objItem.Name & " " & strReturn
End If
Next

' Format Time and Date
 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

1 个答案:

答案 0 :(得分:2)

使用命令行工具wmic进行测试:

C:\> WMIC PATH Win32_NetworkLoginProfile GET Name,LastLogon

显示我机器上所有用户的数据。这让我想知道这是否与您是否拥有管理权限有关。在Windows Vista / 7/2008框中,这也可能意味着用户访问控制阻止您查看所有数据。

尝试强制您的脚本作为管理员运行。