当前位置: 首页 > 图文教程 > 脚本技术 > VBScript > vbscript logparser的ISA2004 Web流量报告

VBScript
NYboy.vbs病毒源代码公布,我来模拟熊猫烧香
vbs脚本病毒生成器 下载
用vbs实现返回 IP 配置数据
mdir.vbs 建立隐藏虚拟目录的vbs
改进后的mkw3site.vbs(创建虚拟目录)
charCodeAt与AscW函数的区别说明
vbs中Empty和Null的区别
用vbs将名称转换为正确的大小写的代码
用vbs实现更改计算机的说明的代码
vbs中使用 ADO 读取所有数据均在一行上的文本文件的代码
用vbs检测Internet Explorer 中是否启用了 ActiveX
在vbs运行命令行工具后让命令窗口保持打开状态的脚本
用vbs读取远程计算机上的文本文件的代码
用vbs从本地 Administrators 组中删除组
用vbs删除前一天创建的备份文件
不错的一篇VBS-JSCRIPT GETOBJECT理解
VBS ArrayList Class vbs中的数组类
如何调试JScript/VBScript的方法
如何通过计划任务调用QuickTest测试脚本
用vbs实现按创建日期的顺序列出一个文件夹中的所有文件

VBScript 中的 vbscript logparser的ISA2004 Web流量报告


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-11   浏览: 93 ::
收藏到网摘: n/a

很喜欢这里的学习气氛,也很佩服两位版主的技术水平,希望能够在这里与大家多多交流。
作为见面礼吧,把前一阵子写的一个生成ISA 2004 Web 流量报告的脚本与大家分享。说明下,该校本是首发而且仅发在这里,我没有在菊花里面或任何地方发过。大家可以随意更改脚本以便适合你的要求,转载请保留作者信息谢谢。
我的很多客户希望能够每天或每周得到一份员工浏览Web情况的报告,例如所访问的站点以及流量等等,他们都使用ISA2004作为web proxy。由于ISA2004自带的report不能满足他们的要求,所以我写了这个脚本,用来生成报告。使用前请先阅读readme.txt
复制代码 代码如下:

'ISA 2004 Web Log Query Tool
'Created by mwpq
'Version 1.0
'Date 2007.9.18

On Error Resume Next
Dim startdate, enddate
Dim topweb, topuser,usertop, usertopweb
'Configuration part of the script
'==================================================================
startdate = 1 ' the newest log files to be queried. 1 means one day ago
interday = 7 ' the oldest log files is startdate + interday
' For example startdate =1, interday =7 means script will query log files between 8 days ago and yesterday's.
topweb="Top 20" ' List Top 20 Websites visited. Just change 20 to other No to get what you want like "top 21" will list top 21 websites.
topuser="Top 10" ' List Top 10 users and their total usage.
Usertop = "Top 20" ' List Top 20 Users with their top websites, depend on uesrtopweb. set to "" to list all users web usage
usertopweb = "Top 10"
sMailTo = "[email protected]" 'Send email repor to
sMailFrom = "[email protected] 'Email comes from
sMailSub = "ISA Web Traffic Report" 'Email Title
sSMTPServer = "youremailserver" 'Email server
strMessage = "Please see attachment for the ISA Web Traffic Report." 'Email txt body.
satt = "C:\Program Files\Microsoft ISA Server\ISALogs\report.htm" 'Email attachment path. The report.htm will be created under ISA's log folder.
'===================================================================

Const cdoSendUsingMethod = "http://schemas.microsoft.com/cdo/configuration/sendusing", _
cdoSendUsingPort = 2, _
cdoSMTPServer = "http://schemas.microsoft.com/cdo/configuration/smtpserver"
'Create the html reprot and write the html header
'=================================================================================================================
Const BEGIN_TABLE = " <TABLE width=100% BORDER=0 CELLSPACING=1 CELLPADDING=2>"
Const END_TABLE = " </TABLE>"
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Set oFSO = CreateObject("Scripting.FileSystemObject")
If oFSO.FileExists(".\report.htm") Then
oFSO.Deletefile(".\report.htm")
End If
If oFSO.FileExists(".\tempsum.w3c") Then
oFSO.Deletefile(".\tempsum.w3c")
End If
Set oFile = oFSO.OpenTextFile(".\report.htm", ForWriting, True, true)
'Write the HTML head to file suit for IE viewer.
oFile.writeline ("<HTML>" & vbcrlf & _
"<HEAD>" & vbcrlf & _
"<TITLE> ISA Web Usage Reports</TITLE>" & VbCrLf & _
"<style type=""text/css"">" & vbcrlf)
oFile.writeline ("<!--" & vbcrlf & _
".Title {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; font-weight: bold; color:'#0000cc'}" & vbcrlf & _
".head {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; color:'#ffffff'}" & vbcrlf & _
".category {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; font-weight: bold; color:'#ffffff'}" & vbcrlf & _
".result {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color:'#000000'}" & vbcrlf & _
".alert {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; font-weight: bold; color:'#ff0000'}" & vbcrlf & _
"a {color: '#000066'; text-decoration:none;}" & vbcrlf & _
"a:hover {text-decoration:underline}" & vbcrlf & _
"-->" & vbcrlf)
oFile.writeline ("</style>" & VbCrLf & _
"</HEAD>" & VbCrLf & _
"<body bgcolor=#ffffff>" & VbCrLf)
oFile.writeline "<p class = Title> ISA Web Traffic Report - From "&date-startdate-interday&" to "&date-startdate
oFile.writeline "<p>"
'=================================================================================================================
'End of create html report header part

'build the log file name list
spath = ""
while interday >= 0
dtmDate = date - startdate - interday
'Convert the current Date to UTC
'=================================================================================================================
strDay = Day(dtmDate)
If Len(strDay) < 2 Then
strDay = "0" & strDay
End If
strMonth = Month(dtmDate)
If Len(strMonth) < 2 Then
strMonth = "0" & strMonth
End If
strYear = Year(dtmDate)
sdate = strYear & strMonth & strDay
'=================================================================================================================
stemp2 = "'"&"ISALOG_"&sdate&"_WEB_* "&"'"
spath = spath & stemp2
if interday - startday > 0 then
spath = spath&", "
end if
interday = interday - 1
wend


'Create a temp sumary file
set objLogParser = CreateObject("MSUtil.LogQuery")
Set objInputFormat = _
CreateObject("MSUtil.LogQuery.W3CInputFormat")
SET w3cOutputFormat = WScript.CreateObject("MSUtil.LogQuery.W3COutputFormat")
w3cOutputFormat.filemode = 1 ' Set file to overwrite mode
strQuery = "SELECT cs-username, r-host, Sum(add(cs-bytes,sc-bytes)) as SRdata into 'tempsum.w3c' FROM "&spath&" where sc-Network = 'External' group by cs-username,r-host order by SRdata DESC"
objLogParser.Executebatch strQuery, objInputFormat,w3cOutputFormat
'check tempsum.w3c existed
Set oFSO1 = CreateObject("Scripting.FileSystemObject")
If oFSO1.FileExists(".\tempsum.w3c") Then
oFSO1 = nothing
else
oFSO1=nothing
wscript.echo "Sorry cannot find some of the log files to query! Script Quit."
wscript.quit
End If

'Generate report based on temp file.
'================================================================================
'Generate top web sites.
fl=0
oFile.writeline (BEGIN_TABLE & VbCrLf)
mWHeading topweb&" Websites"
mWBRow
mWTitle "Site Name"
mWTitle "Traffic (MB)"
mWERow
set objLogParser10 = CreateObject("MSUtil.LogQuery")
Set objInputFormat10 = _
CreateObject("MSUtil.LogQuery.W3CInputFormat")
'objInputFormat.recurse = 2
strQuery10 = "SELECT "&topweb&" r-host, sum(SRdata) as TSRData FROM 'tempsum.w3c' group by r-host order by TSRdata DESC"
Set objRecordSet10 = objLogParser10.Execute(strQuery10, objInputFormat10)
Do While Not objRecordSet10.AtEnd
Set objRecord10 = objRecordSet10.GetRecord
if fl = 0 then
mWBRow
mWDetail2 objRecord10.GetValue("r-host")
mwDetail2 FormatNumber(objRecord10.GetValue("TSRdata")/1048576,2)
mWERow
fl=1
else
mWBRow
mWDetail1 objRecord10.GetValue("r-host")
mwDetail1 FormatNumber(objRecord10.GetValue("TSRdata")/1048576,2)
mWERow
fl=0
end if

'wscript.echo "uri"& objRecord2.GetValue("r-host") & "---" & objRecord2.GetValue("SRdata")
objRecordSet10.MoveNext
Loop
spacer(12)
oFile.writeline (END_TABLE & VbCrLf)
'================================================================================
'================================================================================
'Generate top user list.
fl=0
oFile.writeline (BEGIN_TABLE & VbCrLf)
mWHeading topuser&" Users list"
mWBRow
mWTitle "logon Name"
mWTitle "Traffic (MB)"
mWERow
set objLogParser11 = CreateObject("MSUtil.LogQuery")
Set objInputFormat11 = _
CreateObject("MSUtil.LogQuery.W3CInputFormat")
'objInputFormat.recurse = 2
strQuery11 = "SELECT "&topuser&" cs-username, Sum(SRdata) as TSRdata FROM 'tempsum.w3c' group by cs-username order by TSRdata DESC"
Set objRecordSet11 = objLogParser11.Execute(strQuery11, objInputFormat11)
Do While Not objRecordSet11.AtEnd
Set objRecord11 = objRecordSet11.GetRecord
if fl=0 then
mWBRow
mWDetail2 objRecord11.GetValue("cs-username")
mwDetail2 FormatNumber(objRecord11.GetValue("TSRdata")/1048576,2)
mWERow
fl =1
else
mWBRow
mWDetail1 objRecord11.GetValue("cs-username")
mwDetail1 FormatNumber(objRecord11.GetValue("TSRdata")/1048576,2)
mWERow
fl =0
end if
'wscript.echo "uri"& objRecord2.GetValue("r-host") & "---" & objRecord2.GetValue("SRdata")
objRecordSet11.MoveNext
Loop
spacer(12)
oFile.writeline (END_TABLE & VbCrLf)
'================================================================================

set objLogParser1 = CreateObject("MSUtil.LogQuery")
Set objInputFormat1 = _
CreateObject("MSUtil.LogQuery.W3CInputFormat")
strQuery1 = "SELECT "&usertop&" cs-username, Sum(SRdata) as TSRdata FROM 'tempsum.w3c' group by cs-username order by TSRdata DESC"
Set objRecordSet1 = objLogParser1.Execute(strQuery1, objInputFormat1)
oFile.writeline (BEGIN_TABLE & VbCrLf)
mWHeading usertop&" Users' Web Traffic "
Do While Not objRecordSet1.AtEnd
Set objRecord1 = objRecordSet1.GetRecord
strUsername = objRecord1.GetValue("cs-username")
stt = "'"&strUsername&"'"

mWBRow
mWTitle strUsername &" ------ Total Web Traffic: " & FormatNumber(objRecord1.GetValue("TSRdata")/1048576,2)&" MB"
mWTitle "Traffic (MB)"
mWERow
'Wscript.echo ""
'wscript.echo stt &" >>> data: " & objRecord1.GetValue("TSRdata")
set objLogParser2 = CreateObject("MSUtil.LogQuery")
Set objInputFormat2 = _
CreateObject("MSUtil.LogQuery.W3CInputFormat")
'objInputFormat.recurse = 2
fl=0
strQuery2 = "SELECT "&usertopweb&" r-host, SRdata FROM 'tempsum.w3c' where cs-username =" &stt&" group by r-host,SRdata"
Set objRecordSet2 = objLogParser2.Execute(strQuery2, objInputFormat2)
Do While Not objRecordSet2.AtEnd
Set objRecord2 = objRecordSet2.GetRecord
if fl=0 then
mWBRow
mWDetail2 objRecord2.GetValue("r-host")
mwDetail2 FormatNumber(objRecord2.GetValue("SRdata")/1048576,2)
mWERow
fl=1
else
mWBRow
mWDetail1 objRecord2.GetValue("r-host")
mwDetail1 FormatNumber(objRecord2.GetValue("SRdata")/1048576,2)
mWERow
fl=0
end if
'wscript.echo "uri"& objRecord2.GetValue("r-host") & "---" & objRecord2.GetValue("SRdata")
objRecordSet2.MoveNext
Loop
objRecordSet1.MoveNext
spacer(12)
Loop
oFile.writeline (END_TABLE & VbCrLf)
' Write the html end to report.
oFile.WriteLine ("</body>")
oFile.WriteLine ("</html>")
oFile.Close

'Methods to create html(title and table) part
'=================================================================================================================
Private Sub mWHeading(sHeading)
oFile.writeline ( _
" <tr>" & vbCrLf & _
" <td colspan=7 bgcolor=#0099cc class=head>" & sHeading &"</td>"& vbCrLf & _
" </tr>" & VbCrLf)
End Sub
Private Sub mWTitle(sContent)
oFile.writeline ( _
" <TD bgcolor=#0099ff align=left class=category height=14>" & sContent & "</TD>" & VbCrLf)
End Sub
Private Sub mWDetail1(sContent)
oFile.writeline ( _
" <TD bgcolor=#dce3fc align=left class=result height=12>" & sContent & "</TD>" & VbCrLf)
End Sub
Private Sub mWDetail2(sContent)
oFile.writeline ( _
" <TD bgcolor=#e9fbfe align=left class=result height=12>" & sContent & "</TD>" & VbCrLf)
End Sub
Private Sub mWAlert1(sContent)
oFile.writeline ( _
" <TD bgcolor=#dce3fc align=left class=alert height=12>" & sContent & "</TD>" & VbCrLf)
End Sub
Private Sub mWAlert2(sContent)
oFile.writeline ( _
" <TD bgcolor=#e9fbfe align=left class=alert height=12>" & sContent & "</TD>" & VbCrLf)
End Sub
Private Sub mWBRow
oFile.writeline ( " <tr>" & VbCrLf)
End Sub
Private Sub mWERow
oFile.writeline ( " </tr>" & VbCrLf)
End Sub
Private Sub spacer(iHeight)
oFile.writeline ( _
" <tr><td height=" & iHeight & "></td></tr>" & VbCrLf)
End Sub
'=================================================================================================================
'End of create html method

'Send email

Dim iMsg, iConf, Flds
'// Create the CDO connections.
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields
'// SMTP server configuration.
With Flds
.Item(cdoSendUsingMethod) = cdoSendUsingPort
'// Set the SMTP server address here.
.Item(cdoSMTPServer) = sSMTPServer
.Update
End With
'// Set the message properties.
With iMsg
Set .Configuration = iConf
.To = sMailTo
.From = sMailFrom
.Subject = sMailSub
.TextBody = strMessage
End With
'iMsg.HTMLBody = sMailMessage
'// Send the message.

iMsg.AddAttachment satt
iMsg.Send ' send the message.
Set iMsg = Nothing
Set iConf = Nothing