首页 > 其他分享 >VBS 批量Ping的项目实现

VBS 批量Ping的项目实现

时间:2024-04-16 17:59:17浏览次数:21  
标签:strLog End Address Ping VBS objPing nbsp strDisplay

                        <p>本文用vb编写的 ping程序实现,具体如下:</p>
'判断当前VBS脚本是否由CScript执行
If InStr(LCase(WScript.FullName), "cscript.exe") = 0 Then
?? ?'若不是由CScript执行,则使用CScript重新执行当前脚本
?? ?Set objShell = CreateObject("Shell.Application")?
?? ?objShell.ShellExecute "cscript.exe", """" & WScript.ScriptFullName & """", , , 1
?? ?WScript.Quit?? ?'退出当前程序
End If

'----------------------------------------------------------------------------------------------

Set?? ??? ?objFSO?? ??? ?= CreateObject("Scripting.FileSystemObject")
'创建日志文件
Set?? ??? ?fileLog?? ??? ?= objFSO.CreateTextFile("Ping运行结果(" &_
?? ??? ??? ??? ??? ??? ??? ??? ?Year(Now()) & "-" & Month(Now()) & "-" & Day(Now()) & " " &_
?? ??? ??? ??? ??? ??? ??? ??? ?Hour(Now()) & "-" & Minute(Now()) & "-" & Second(Now()) & ").txt", True)

'----------------------------------------------------------------------------------------------

'Ping 方案类
Class PingScheme
?? ?Public?? ??? ?Address?? ??? ??? ??? ??? ??? ?'目标地址
?? ?Public?? ??? ?DisconnectionCount?? ?'断线计数
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?? ??? ??? ??? ??? ??? ??? ?'发送邮件标志
?? ?bEmailFlag?? ??? ??? ??? ??? ?= False

Const?? ?LoopInterval?? ??? ?= 5000?? ?'循环间隔

Dim?? ??? ?strDisplay?? ??? ??? ?'显示缓存字符串
Dim?? ??? ?strLog?? ??? ??? ??? ??? ?'日志文件缓存字符串

'连接WMI服务
Set?? ??? ?objWMIService = GetObject("winmgmts:\.\root\cimv2")

Do?
?? ?
?? ?strDisplay?? ?= "----" & Now & "----" & vbCrlf
?? ?strLog?? ??? ??? ?= ""
?? ?'通过WMI调用Ping命令,返回Ping执行结果集合
?? ?Set colPings = objWMIService.ExecQuery("SELECT * FROM Win32_PingStatus WHERE " & strPingQuery)
?? ?'遍历结果集合
?? ?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 & ?"目标网络不可达" & vbCrlf
?? ??? ??? ??? ?strLog?? ??? ??? ?= strLog & "目标网络不可达"
?? ??? ??? ?Case 11003
?? ??? ??? ??? ?strDisplay?? ?= strDisplay & ?"目标主机不可达 " & vbCrlf
?? ??? ??? ??? ?strLog?? ??? ??? ?= strLog & "目标主机不可达"
?? ??? ??? ?Case 11010
?? ??? ??? ??? ?strDisplay?? ?= strDisplay & ?"等待超时" & vbCrlf
?? ??? ??? ??? ?strLog?? ??? ??? ?= strLog & "等待超时"
?? ??? ??? ?Case Else
?? ??? ??? ??? ?If IsNull(objPing.StatusCode) Then
?? ??? ??? ??? ??? ?strDisplay?? ?= strDisplay & ?"找不到主机 " & objPing.Address & vbCrlf
?? ??? ??? ??? ??? ?strLog?? ??? ??? ?= strLog & "找不到主机 " & objPing.Address
?? ??? ??? ??? ?Else
?? ??? ??? ??? ??? ?strDisplay?? ?= strDisplay & ?"错误:" & objPing.StatusCode & vbCrlf
?? ??? ??? ??? ??? ?strLog?? ??? ??? ?= strLog & "错误:" & objPing.StatusCode
?? ??? ??? ??? ?End If
?? ??? ?End Select
?? ??? ?
?? ??? ?strLog = strLog & vbCrlf
?? ??? ?
?? ??? ?'判断 Ping返回结果是否执行成功?
?? ??? ?If objPing.StatusCode <> 0 Then
?? ??? ??? ?'若不成功 将相应的 DisconnectionCount 加 1
?? ??? ??? ?dicPingScheme(objPing.Address).DisconnectionCount = dicPingScheme(objPing.Address).DisconnectionCount + 1
?? ??? ??? ?'DisconnectionCount = 10 时 置位 发送邮件标志
?? ??? ??? ?If dicPingScheme(objPing.Address).DisconnectionCount = 10 Then
?? ??? ??? ??? ?bEmailFlag = True
?? ??? ??? ?End If
?? ??? ?Else
?? ??? ??? ?'若成功 将相应的 DisconnectionCount 清零
?? ??? ??? ?dicPingScheme(objPing.Address).DisconnectionCount = 0
?? ??? ?End If
?? ??? ?
?? ?Next
?? ?
?? ?'输出显示
?? ?PrintLine strDisplay
?? ?'保存日志
?? ?fileLog.WriteLine strLog
?? ?
?? ?'如果 发送邮件标志 被置位 清除标志 并 发送邮件
?? ?If bEmailFlag = True Then
?? ??? ?bEmailFlag = False?? ??? ?'清除 标志
?? ??? ?SendEmail "设备断线 " & Now, strDisplay
?? ?End If
?? ?
?? ?'挂起指定时间,暂停
?? ?WScript.Sleep(LoopInterval)
?? ?
Loop

'---------------------------------------------------------------------------------------

'标准输出
Public Sub Print ( tmp )
?? ?WScript.StdOut.Write tmp
End Sub

'标准输出以换行符结尾
Public Sub PrintLine ( tmp )
?? ?WScript.StdOut.Write tmp & vbCrlf
End Sub

'---------------------------------------------------------------------------------------
'发送邮件
Public Sub SendEmail(title, textbody)

?? ?Set objCDO?? ??? ??? ?= CreateObject("CDO.Message")

?? ?objCDO.Subject?? ??? ?= title
?? ?objCDO.From?? ??? ??? ?= "[email protected]"
?? ?objCDO.To?? ??? ??? ??? ?= "[email protected]"
?? ?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

到此这篇关于VBS 批量Ping的项目实现的文章就介绍到这了,更多相关VBS 批量Ping内容请搜索创业项目排行榜前十名http://www.piaodoo.com/以前的文章或继续浏览下面的相关文章希望大家以后多多支持创业项目排行榜前十名http://www.piaodoo.com/!

                        友情连接: 

创业项目排行榜前十名

美文集

茂名一技

茂名一技

手游排行前十名

标签:strLog,End,Address,Ping,VBS,objPing,nbsp,strDisplay
From: https://www.cnblogs.com/python1314520/p/18138830

相关文章

  • 教你用vbs实现微信自动发送消息功能
    <divid="navCategory"><h5class="catalogue">目录</h5><ulclass="first_class_ul"><li><ahref="#_label0">前言</a></li><li><ahref="#_la......
  • 抖音很火的vbs表白代码(简单实用!)
    <p>好玩的循环表白代码</p>1,右键->新建文本文件2,右键->编辑3,粘贴下面代码MsgBox"十年相遇"MsgBox"百年回眸"MsgBox"千年同船渡"MsgBox"我愿以万年的等待"MsgBox"......
  • 使用vbs脚本来监控windows服务器上的应用程序(不存在就启动)
    <p>这个vbs代码主要实现的功能就是运行该程序,就会在进程中出现一个wscript.exe它会每隔10s扫面一次进程中是否存在notepad.exe这个程序,不存在就启动。这个启动程序可能跟进程名不一样,好比tomcat应用,启动的是startup.bat,后台进程名为java.exe,这样就需要......
  • 24/04/13 CF494C Helping People / HDU5866 Lucky E
    CF494C:题面翻译有一个长为\(n\)的数列,初始时为\(a_{1..n}\)。给你\(q\)个操作,第\(i\)个操作将\([l_i,r_i]\)内的数全部加一,有\(p_i\)的概率被执行。保证区间不会交错,即:\(\foralli,j\in[1,q],l_i\ler_i<l_j\ler_j\)或\(l_i\lel_j\ler_j\ler_i\)或\(l_j\le......
  • 52 Things: Number 31: Game Hopping Proof
    52Things:Number31:GameHoppingProof52件事:数字31:游戏跳跃证明 Thisisthelatestinaseriesofblogpoststoaddressthelistof'52ThingsEveryPhDStudentShouldKnowToDoCryptography':asetofquestionscompiledtogivePhDcandidatesase......
  • 手把手教你做阅读理解提高001-Camping:Finding Myself and Growing Strong-露营:在成长
    PDF格式公众号回复关键字:ZKYDT001阅读理解技巧,在帮助读者有效获取和理解文本信息方面发挥着重要作用,熟练掌握如下6个技巧,可快速突破阅读理解1预览文章结构在开始深入阅读之前,快速浏览文章的标题、段落开头和结尾,可以迅速把握文章的主题、大致内容和结构标题通常能概括文......
  • SpingBoot项目Tomcat假死,导致http(openfeign)请求无法响应问题定位
    项目简介:<spring-boot.version>2.3.2.RELEASE</spring-boot.version><spring-cloud.version>Hoxton.SR12</spring-cloud.version>使用docker进行项目部署问题描述:项目中代码中大量使用异步多线程操作,没个异步过程中大量掺杂数据库查询、Redis查询、Feign调用、RabbitMq发送接收......
  • group by grouping sets计算每个分组的占比
    计算每个分组的数量selectparent_dict_code,count(*)fromtb_data_dictgroupbyrollup(parent_dict_code);计算占比,注意要*1.0,否则仍为整型,全为0selectparent_dict_code,count(data_dict_id),(selectcount(data_dict_id)fromtb_data_dict)assum_all,count(data_dict......
  • ping,telnet,traceroute原理
    1pingping发送的是ICMP报文,ICMP报文是和tcp报文处在同一层次,嵌套在IP报文内(报文头中的Protocol=1,在IP报文中通过Protocol的值决定接下来应当将数据交给哪个协议层进行进一步处理,tcp协议Protocol=6,ICMP协议Protocol=1)tcp协议报文必须指定源端口和目的端口ICMP协议报文不需要指......
  • Elasticsearch之-mapping 映射管理
    目录Elasticsearch之-mapping映射管理一、映射介绍1.1字段数据类型1.2映射参数二、创建索引时指定映射2.16.x的版本写法2.27.x版本以后2.3插入数据测试三、查看索引Elasticsearch之-mapping映射管理在Elasticsearch6.0.0或更高版本中创建的索引只包含一个mappingtype......