VBS 批量Ping的項(xiàng)目實(shí)現(xiàn)
更新時(shí)間:2022年04月25日 10:28:36 作者:技術(shù)員puc
本文主要介紹了VBS批量Ping的項(xiàng)目實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
本文用vb編寫的 ping程序?qū)崿F(xiàn),具體如下:
'判斷當(dāng)前VBS腳本是否由CScript執(zhí)行
If InStr(LCase(WScript.FullName), "cscript.exe") = 0 Then
?? ?'若不是由CScript執(zhí)行,則使用CScript重新執(zhí)行當(dāng)前腳本
?? ?Set objShell = CreateObject("Shell.Application")?
?? ?objShell.ShellExecute "cscript.exe", """" & WScript.ScriptFullName & """", , , 1
?? ?WScript.Quit?? ?'退出當(dāng)前程序
End If
'----------------------------------------------------------------------------------------------
Set?? ??? ?objFSO?? ??? ?= CreateObject("Scripting.FileSystemObject")
'創(chuàng)建日志文件
Set?? ??? ?fileLog?? ??? ?= objFSO.CreateTextFile("Ping運(yùn)行結(jié)果(" &_
?? ??? ??? ??? ??? ??? ??? ??? ?Year(Now()) & "-" & Month(Now()) & "-" & Day(Now()) & " " &_
?? ??? ??? ??? ??? ??? ??? ??? ?Hour(Now()) & "-" & Minute(Now()) & "-" & Second(Now()) & ").txt", True)
'----------------------------------------------------------------------------------------------
'Ping 方案類
Class PingScheme
?? ?Public?? ??? ?Address?? ??? ??? ??? ??? ??? ?'目標(biāo)地址
?? ?Public?? ??? ?DisconnectionCount?? ?'斷線計(jì)數(shù)
End Class
Dim?? ??? ?dicPingScheme?? ??? ??? ??? ??? ?'配置方案集合
Set?? ??? ?dicPingScheme?? ?= CreateObject("Scripting.Dictionary")
Dim?? ??? ?strPingQuery?? ??? ??? ??? ??? ??? ?'Ping查詢條件語句
?? ?strPingQuery?? ??? ??? ??? ?= Null
'添加Ping方案到方案集合
Public Sub AddPingScheme ( addr )
?? ?
?? ?Set newPingScheme = New PingScheme
?? ??? ?newPingScheme.Address = addr
?? ??? ?newPingScheme.DisconnectionCount = 0
?? ?
?? ?dicPingScheme.Add addr, newPingScheme
?? ?'合成Ping查詢條件語句
?? ?If IsNull( strPingQuery ) Then
?? ??? ?strPingQuery = "Address='" & addr & "'"
?? ?Else
?? ??? ?strPingQuery = strPingQuery & "OR Address='" & addr & "'"
?? ?End If
?? ?
End Sub
'----------------------------------------------------------------------------------------------
AddPingScheme ( "8.8.8.8" )
AddPingScheme ( "8.8.4.4" )
AddPingScheme ( "192.168.1.8" )
'----------------------------------------------------------------------------------------------
Dim?? ??? ?bEmailFlag?? ??? ??? ??? ??? ??? ??? ?'發(fā)送郵件標(biāo)志
?? ?bEmailFlag?? ??? ??? ??? ??? ?= False
Const?? ?LoopInterval?? ??? ?= 5000?? ?'循環(huán)間隔
Dim?? ??? ?strDisplay?? ??? ??? ?'顯示緩存字符串
Dim?? ??? ?strLog?? ??? ??? ??? ??? ?'日志文件緩存字符串
'連接WMI服務(wù)
Set?? ??? ?objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Do?
?? ?
?? ?strDisplay?? ?= "----" & Now & "----" & vbCrlf
?? ?strLog?? ??? ??? ?= ""
?? ?'通過WMI調(diào)用Ping命令,返回Ping執(zhí)行結(jié)果集合
?? ?Set colPings = objWMIService.ExecQuery("SELECT * FROM Win32_PingStatus WHERE " & strPingQuery)
?? ?'遍歷結(jié)果集合
?? ?For Each objPing in colPings
?? ??? ?
?? ??? ?strLog = strLog & FormatDateTime(Now()) & vbTab &_
?? ??? ??? ??? ??? ??? ?objPing.Address & vbTab & objPing.StatusCode & vbTab
?? ??? ?strDisplay = strDisplay & "[" & objPing.Address & "] - "
?? ??? ?
?? ??? ?Select Case objPing.StatusCode
?? ??? ??? ?Case 0
?? ??? ??? ??? ?strDisplay?? ?= strDisplay & objPing.ProtocolAddress &_
?? ??? ??? ??? ??? ??? ??? ??? ??? ?", Size: " & objPing.ReplySize &_
?? ??? ??? ??? ??? ??? ??? ??? ??? ?", Time: " & objPing.ResponseTime &_
?? ??? ??? ??? ??? ??? ??? ??? ??? ?", TTL: " & objPing.ResponseTimeToLive & vbCrlf
?? ??? ??? ??? ?strLog?? ??? ??? ?= strLog & objPing.ProtocolAddress & vbTab & objPing.ReplySize & vbTab &_
?? ??? ??? ??? ??? ??? ??? ??? ??? ?objPing.ResponseTime & vbTab & objPing.ResponseTimeToLive
?? ??? ??? ?Case 11002
?? ??? ??? ??? ?strDisplay?? ?= strDisplay & ?"目標(biāo)網(wǎng)絡(luò)不可達(dá)" & vbCrlf
?? ??? ??? ??? ?strLog?? ??? ??? ?= strLog & "目標(biāo)網(wǎng)絡(luò)不可達(dá)"
?? ??? ??? ?Case 11003
?? ??? ??? ??? ?strDisplay?? ?= strDisplay & ?"目標(biāo)主機(jī)不可達(dá) " & vbCrlf
?? ??? ??? ??? ?strLog?? ??? ??? ?= strLog & "目標(biāo)主機(jī)不可達(dá)"
?? ??? ??? ?Case 11010
?? ??? ??? ??? ?strDisplay?? ?= strDisplay & ?"等待超時(shí)" & vbCrlf
?? ??? ??? ??? ?strLog?? ??? ??? ?= strLog & "等待超時(shí)"
?? ??? ??? ?Case Else
?? ??? ??? ??? ?If IsNull(objPing.StatusCode) Then
?? ??? ??? ??? ??? ?strDisplay?? ?= strDisplay & ?"找不到主機(jī) " & objPing.Address & vbCrlf
?? ??? ??? ??? ??? ?strLog?? ??? ??? ?= strLog & "找不到主機(jī) " & objPing.Address
?? ??? ??? ??? ?Else
?? ??? ??? ??? ??? ?strDisplay?? ?= strDisplay & ?"錯(cuò)誤:" & objPing.StatusCode & vbCrlf
?? ??? ??? ??? ??? ?strLog?? ??? ??? ?= strLog & "錯(cuò)誤:" & objPing.StatusCode
?? ??? ??? ??? ?End If
?? ??? ?End Select
?? ??? ?
?? ??? ?strLog = strLog & vbCrlf
?? ??? ?
?? ??? ?'判斷 Ping返回結(jié)果是否執(zhí)行成功?
?? ??? ?If objPing.StatusCode <> 0 Then
?? ??? ??? ?'若不成功 將相應(yīng)的 DisconnectionCount 加 1
?? ??? ??? ?dicPingScheme(objPing.Address).DisconnectionCount = dicPingScheme(objPing.Address).DisconnectionCount + 1
?? ??? ??? ?'DisconnectionCount = 10 時(shí) 置位 發(fā)送郵件標(biāo)志
?? ??? ??? ?If dicPingScheme(objPing.Address).DisconnectionCount = 10 Then
?? ??? ??? ??? ?bEmailFlag = True
?? ??? ??? ?End If
?? ??? ?Else
?? ??? ??? ?'若成功 將相應(yīng)的 DisconnectionCount 清零
?? ??? ??? ?dicPingScheme(objPing.Address).DisconnectionCount = 0
?? ??? ?End If
?? ??? ?
?? ?Next
?? ?
?? ?'輸出顯示
?? ?PrintLine strDisplay
?? ?'保存日志
?? ?fileLog.WriteLine strLog
?? ?
?? ?'如果 發(fā)送郵件標(biāo)志 被置位 清除標(biāo)志 并 發(fā)送郵件
?? ?If bEmailFlag = True Then
?? ??? ?bEmailFlag = False?? ??? ?'清除 標(biāo)志
?? ??? ?SendEmail "設(shè)備斷線 " & Now, strDisplay
?? ?End If
?? ?
?? ?'掛起指定時(shí)間,暫停
?? ?WScript.Sleep(LoopInterval)
?? ?
Loop
'---------------------------------------------------------------------------------------
'標(biāo)準(zhǔn)輸出
Public Sub Print ( tmp )
?? ?WScript.StdOut.Write tmp
End Sub
'標(biāo)準(zhǔn)輸出以換行符結(jié)尾
Public Sub PrintLine ( tmp )
?? ?WScript.StdOut.Write tmp & vbCrlf
End Sub
'---------------------------------------------------------------------------------------
'發(fā)送郵件
Public Sub SendEmail(title, textbody)
?? ?Set objCDO?? ??? ??? ?= CreateObject("CDO.Message")
?? ?objCDO.Subject?? ??? ?= title
?? ?objCDO.From?? ??? ??? ?= "XXX@qq.com"
?? ?objCDO.To?? ??? ??? ??? ?= "XXX@qq.com"
?? ?objCDO.TextBody?? ?= textbody
?? ?cdoConfigPrefix?? ??? ?= "http://schemas.microsoft.com/cdo/configuration/"
?? ?Set objCDOConfig?? ?= objCDO.Configuration
?? ?With objCDOConfig
?? ??? ?.Fields(cdoConfigPrefix & "smtpserver")?? ??? ??? ??? ?= "smtp.qq.com"
?? ??? ?.Fields(cdoConfigPrefix & "smtpserverport")?? ??? ?= 465
?? ??? ?.Fields(cdoConfigPrefix & "sendusing")?? ??? ??? ??? ?= 2 ?
?? ??? ?.Fields(cdoConfigPrefix & "smtpauthenticate")?? ?= 1 ?
?? ??? ?.Fields(cdoConfigPrefix & "smtpusessl")?? ??? ??? ?= true?
?? ??? ?.Fields(cdoConfigPrefix & "sendusername")?? ??? ?= "XXX"
?? ??? ?.Fields(cdoConfigPrefix & "sendpassword")?? ??? ?= "XXX"
?? ??? ?.Fields.Update
?? ?End With
?? ?objCDO.Send
?? ?
?? ?Set objCDOConfig = Nothing
?? ?Set objCDO = Nothing
?? ?
End Sub到此這篇關(guān)于VBS 批量Ping的項(xiàng)目實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)VBS 批量Ping內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:
相關(guān)文章
用vbs實(shí)現(xiàn)的確定共享文件夾的本地路徑?
用vbs實(shí)現(xiàn)的確定共享文件夾的本地路徑?...2007-03-03
VBS教程:函數(shù)-TimeSerial 函數(shù)
VBS教程:函數(shù)-TimeSerial 函數(shù)...2006-11-11
vbScript on error resume next容錯(cuò)使用心得
在vbscript中,使用on error resume next處理錯(cuò)誤,當(dāng)使用這段代碼時(shí),程序?qū)⒑雎援a(chǎn)生的錯(cuò)誤繼續(xù)運(yùn)行后面的代碼。本文就使用心得作個(gè)小結(jié),供有需要的朋友參考2009-02-02
用VBScript批量安裝網(wǎng)絡(luò)打印機(jī)和設(shè)置默認(rèn)打印機(jī)
假如你有幾十臺(tái)機(jī)器,幾臺(tái)打印機(jī),共享網(wǎng)絡(luò)上有網(wǎng)絡(luò)打印機(jī)的安裝驅(qū)動(dòng),可是每臺(tái)電腦都點(diǎn)擊幾次驅(qū)動(dòng)十分麻煩,本人做了個(gè)VBS,這樣就方便多了,拿來和大家分享,不足之處請(qǐng)見諒!2009-03-03

