none
问一个关于VBS脚本的问题 RRS feed

  • 问题

  • 我用一个脚本查询打印日志,结果出输的时间并没有按照日期时间格式输出,请问怎么处理?

    脚本内容:

    '查询日志
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colLoggedEvents = objWMIService.ExecQuery _
        ("Select * from Win32_NTLogEvent Where Logfile = 'system' AND EventCode = 4 AND SourceName = 'print'AND TimeWritten = '"& dtmStartDate & "' and TimeWritten < '" & dtmEndDate & "'"")


    '写文本文件
    Const ForAppending = 8
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFSO.OpenTextFile _
        ("C:\a.txt", ForAppending, True)
    For Each objService in colLoggedEvents
        objTextFile.WriteLine(objService.ComputerName & vbTab & objService.EventCode & vbTab & objService.Message & vbTab & objService.RecordNumber & vbTab & objService.SourceName & vbTab & objService.TimeWritten & vbTab & objService.Type & vbTab & objService.User)
    Next
    objTextFile.Close

     

     

    输出格式如下:

    PC1 4 打印机 EPSON DLQ-1000K 删除操作搁置中。
     8065 Print 20080925102153.000000+480 警告 MICROSOFT\USER
    PC2 4 打印机 Send To OneNote 2007 删除操作搁置中。
     7670 Print 20080911030113.000000+480 警告 NT AUTHORITY\SYSTEM

     

    输出的时间格式怎么是这种:20080925102153.000000+480 

    2008年9月25日 6:01

答案

  •  

    Code Snippet

    wscript.echo  WMIDateStringToDate(objService.TimeWritten)

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

     

     

    2008年9月25日 6:57
    版主

全部回复

  • 这是一种 DMTF 日期时间格式,可以使用Left(str,8)取其中的一部分,然后再格式化成具体的样子

    详细信息参见 Windows Management Instrumentation SDK

    http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=afe41f46-e213-4cbf-9c5b-fbf236e0e875
    2008年9月25日 6:52
    版主
  •  

    Code Snippet

    wscript.echo  WMIDateStringToDate(objService.TimeWritten)

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

     

     

    2008年9月25日 6:57
    版主
  • 这个文章有转换的函数
    http://www.xker.com/page/e2007/0117/15980.html
    2008年9月25日 6:59
    版主
  • 谢谢,原来用MID截取字符串就行了。

    2008年9月25日 8:08