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

Vbscript 查询多个用户的上次登录日期,vbscript,wmi,wmi-query,Vbscript,Wmi,Wmi Query,我正在编写一个脚本,需要查询几个域用户上次登录到计算机的时间。我想我可以用最后访问日期\docs and settings\username来完成,但我们的备份工具破坏了这个计划 然后我研究了如何使用WMI_UserProfile,但它只查询本地配置文件。因此,我找到了WNI_NetworkLogin配置文件,但我似乎只能获得已登录用户的登录日期。是否可以使用WNI_NetworkLogin配置文件查询多个用户的上次登录日期,或者我是否可以查询其他内容 On Error Resume Next

我正在编写一个脚本,需要查询几个域用户上次登录到计算机的时间。我想我可以用最后访问日期\docs and settings\username来完成,但我们的备份工具破坏了这个计划

然后我研究了如何使用WMI_UserProfile,但它只查询本地配置文件。因此,我找到了WNI_NetworkLogin配置文件,但我似乎只能获得已登录用户的登录日期。是否可以使用WNI_NetworkLogin配置文件查询多个用户的上次登录日期,或者我是否可以查询其他内容

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
出错时继续下一步
设置WshNetwork=CreateObject(“Wscript.Network”)
strComputer=WshNetwork.ComputerName
strDayOfMonth=Right(“0”和Day(Date()),2)
strMonth=Right(“0”和月(日期()),2)
strYear=Right(年份(日期()),4)
strDate=strDayOfMonth&“/”&strMonth&“/”&strYear
oLast=DateAdd(“d”,-60,标准日期)
设置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”
设置objWMIService=GetObject(“winmgmts:\\”&strComputer&“\root\cimv2”)
Set colItems=objWMIService.ExecQuery(“从Win32\u NetworkLoginProfile中选择*)
对于每个对象,在colitem中
dtmAccessTime=objItem.LastLogon
strReturn=WMIDateStringToDate(dtmAccessTime)
strUsers=objItem.Name
Set colMatches=objRegEx.Execute(strUsers)
如果colMatches.Count小于1,则
strfolder=objFolder.Name
Wscript.Echo objItem.Name&“”&strReturn
如果结束
下一个
'格式化时间和日期
函数WMIDateStringToDate(dtmStart)
WMIDateStringToDate=CDate(Mid(dtmStart,5,2)和“/”和_
中间(dtmStart,7,2)和“/”与左侧(dtmStart,4)_
&“&Mid(dtmStart,9,2)&”:”_
Mid(dtmStart,11,2)和“&Mid(dtmStart_
13, 2))
端函数

使用命令行工具测试wmic如下:

C:\> WMIC PATH Win32_NetworkLoginProfile GET Name,LastLogon
显示我机器上所有用户的数据。这让我想知道这是否锁定到您是否拥有管理权限。在Windows Vista/7/2008框中,这也可能意味着用户访问控制阻止您查看所有数据


请尝试强制您的脚本以管理员身份运行。

谢谢,运行该脚本将返回所有用户配置文件和日期。出于某种原因,我的脚本不会将您的脚本张贴起来,以便其他人可以查看它。