[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

求VBS代码精简:查询指定天数之前的用户登陆记录

我在组策略里面启用了用户登陆审核策略,写了以下代码来查询指定天数之前的用户登陆记录。等号中间那段转换日期时间格式的代码总感觉有些臃肿,请问应该如何简化代码以提供执行效率呢?
  1. Option Explicit
  2. Dim intIntervalDay, strLoginLog, strComputer, colLoggedEvents, objEvent
  3. Dim objShell, objFSO, objSWbemDateTime, objDstFile, objWMIService
  4. intIntervalDay=7 'How many days ago
  5. strLoginLog="C:\test\LoginList.log" 'Where to record the log
  6. Set objShell = CreateObject("WScript.Shell")
  7. Set objFSO = CreateObject("Scripting.FileSystemObject")
  8. Set objSWbemDateTime = CreateObject("WbemScripting.SWbemDateTime")
  9. Set objDstFile = objFSO.OpenTextFile(strLoginLog,8,True)
  10. strComputer = "."
  11. Set objWMIService = GetObject("winmgmts:" _
  12.     & "{impersonationLevel=impersonate, (Security)}!\\" & strComputer & "\root\cimv2")
  13. Set colLoggedEvents = objWMIService.ExecQuery _
  14.     ("Select * from Win32_NTLogEvent Where Logfile = 'Security' and EventCode = '528'")
  15. For Each objEvent in colLoggedEvents
  16.     Dim dtmLocalTime, dtmEventTime, intDiffDay
  17. '    Wscript.Echo "Time Written: " & objEvent.TimeWritten
  18. '    Wscript.Echo "Computer Name: " & objEvent.ComputerName
  19. '    Wscript.Echo "Event Code: " & objEvent.EventCode
  20. '    Wscript.Echo "User: " & objEvent.User
  21. '    Wscript.Echo "Category: " & objEvent.Category
  22. '    Wscript.Echo "Message: " & objEvent.Message
  23. '    Wscript.Echo "Record Number: " & objEvent.RecordNumber
  24. '    Wscript.Echo "Source Name: " & objEvent.SourceName
  25. '    Wscript.Echo "Event Type: " & objEvent.Type
  26. '    =================================================
  27.     objSWbemDateTime.Value = objEvent.TimeWritten
  28.     dtmLocalTime = objSWbemDateTime.GetVarDate(true)
  29.     dtmEventTime = CDate(dtmLocalTime)
  30.     intDiffDay = DateDiff("d", dtmEventTime, Now)
  31. '    =================================================
  32.     If (intDiffDay <= intIntervalDay) Then
  33.         If (objEvent.User <> "NT AUTHORITY\NETWORK SERVICE") Then
  34.             If (objEvent.User <> "NT AUTHORITY\LOCAL SERVICE") Then
  35.                 objDstFile.WriteLine objEvent.TimeWritten _
  36.                 & " " & objEvent.ComputerName _
  37.                 & " " & objEvent.EventCode _
  38.                 & " " & objEvent.User
  39.             End If
  40.         End If
  41.     End If
  42. Next
  43. objDstFile.Close
  44. objShell.Run "notepad " & strLoginLog
复制代码
Do All in Command Line

返回列表