打印

[求助] 求一個可以檢查PING服務器的腳本

求一個可以檢查PING服務器的腳本

目前服務器常出現斷線現象而不能及時察覺﹐想實現自定時ping指定的服務器IP﹐如ping不服務器提示報警。

TOP

帮你写了一个。把要ping的对象服务器名字替换“我的服务器"; 我设置的检测间隔是5秒钟,你可以自己调节;如果通讯失败的话,脚本会自动停止. 这个脚本应该可以一直在后台运行, 占用的内存不大.
复制内容到剪贴板
代码:
WScript.Echo Ping("我的服务器")
Function Ping(sName)
Do
Dim cPingResults, oPingResult
Set cPingResults = GetObject("winmgmts://./root/" & "cimv2").ExecQuery("SELECT " & "* FROM Win32_PingStatus WHERE " & "Address = '" & sName & "'")
On Error Resume Next
WScript.Sleep 5000
For Each oPingResult In cPingResults
If Not IsObject(cPingResults) Then
WScript.Echo "警告,无响应"
WScript.Quit
ElseIf oPingResult.StatusCode = 0 Then
'通的话需要做什么写到这里
Else
WScript.Echo "警告,无响应"
WScript.Quit
End If
Next
Loop until i<>i
End Function
[ 本帖最后由 ironwires 于 2007-8-31 14:05 编辑 ]
本帖最近评分记录
  • mwpq 菊花元 +10 谢谢您的帮助 2007-8-28 05:02

TOP

我的也很类似。

'使用Ping.exe检测机器是否在线2 @- J& V0 q- r' }- ~9 L
'******************************************************************************
3 o( Z9 l: d r, DFunction Ping(strComputer)1 }) b/ D. Z( x, o; @, U; c0 U1 p( T

& l; E& a, n% A; \, ZDim objShell,objExecObject,strText
( y+ e2 U$ D+ I x3 D; }3 N
- O% Z) k, }- ~ Set objShell = CreateObject("WScript.Shell")0 m3 F/ x& B8 B( o% A) T7 Z% @
Set objExecObject = objShell.Exec ("ping -n 1 -w 2 " & strComputer)
5 ?# t; {6 ~. k/ a1 C9 I7 } Do While Not objExecObject.StdOut.AtEndOfStream4 S. ^7 h6 X- C4 A% ]0 |$ M# _
strText = objExecObject.StdOut.ReadAll()1 W' w" I% D" w
If Instr(strText, "Reply") > 0 Then
7 [; e5 ?+ Q& l+ Z) X Ping = 1
* v6 b* O" T* I% }, U Else0 m" ^1 S! j k9 ]- p
Ping = 0
G* V1 R% S% K U End If. T/ ^$ ?' O% u. n9 k4 Q9 |9 Y8 _
Loop
- ^. D' H; `* n" k% d& F, X
+ B/ ~- L k& [$ fEnd Function( Q2 k; A! c" z+ C
'******************************************************************************
& ~" L, V# L! Y'End Of Function
) D! `# q. z' o1 _/ k: e1 q9 I1 y/ y% @% v r- {; B( H

0 P( m3 V+ g6 t7 @* t! z8 k'使用WMI,检测机器是否在线,需要在XP或者2003机器上执行
( a: x+ i# D( ~'******************************************************************************+ _9 ^, \. ]- x! k- \) U M6 _
Function PingStatus(strComputer)1 ^, c& L' |) p+ b) d2 `

) v1 ~- o9 d7 V Dim objWMIService,objPing,colPings
* H7 ^! J! x: _0 J& c% V) @
2 I9 ], m- J& S2 U( t3 f6 Z5 v Set objWMIService = GetObject("winmgmts:" _$ G' g4 r% b6 G4 `# v, b. l
& "{impersonationLevel=impersonate}!\\.\root\cimv2")
' a; @5 F F) t3 J9 _ Set colPings = objWMIService.ExecQuery _2 M" U+ x" Z7 m9 `% D( g
("Select * From Win32_PingStatus where Address = '" & strComputer & "'")
- H% X4 B' I& C1 V: O" ?$ `3 M( \ For Each objPing in colPings
& w! p @, d# e! n, B7 r2 C If objPing.StatusCode = 0 Then
5 w l( w3 w( c3 Z/ P) | PingStatus = 1
* I2 m) }$ c+ U4 N, A* B Else8 d0 r$ ^) r2 @) d7 t
PingStatus = 0
$ S' U2 i. ~: [! f6 i( [" v: K End If$ X0 I ?, _ G; V
Next8 Q7 P9 n' u. c, v

: B6 Y# H$ E5 V$ R/ M. |End Function" N Y- E% }7 {+ ]- m. ?0 c. z3 U
'******************************************************************************

TOP

很好非常感謝﹗如果同時檢測多台電腦呢﹗可否郵件發送警告而且告知那一台電腦綱絡中斷呢﹗ f1 x6 A1 L- a T4 y, ^
sorry ﹗小弟不才想法有點多﹗

TOP

引用:
原帖由 sbfncel235 于 2007-8-30 19:19 发表
8 t, J- P. J6 F7 n$ {4 `8 z很好非常感謝﹗如果同時檢測多台電腦呢﹗可否郵件發送警告而且告知那一台電腦綱絡中斷呢﹗
& d7 q5 `; u( b9 ~' e; K7 F# F sorry ﹗小弟不才想法有點多﹗
" ]% [, {8 w* c7 W5 f' Q! k5 K5 Y) s4 ]* \/ Q6 u
在原来的脚本上做了些修改,现在你可以同时运行几个同样的脚本,只要每次输入的服务名字不一样就可以,它可以同时监控。
# X+ M; B2 a& R% p' u# h2 s' i( H* `
! P N- U5 _8 e" ?2 g& v加上了发邮件的sub. 该脚本要求运行的机器要装有outlook.
复制内容到剪贴板
代码:
sServer = inputbox ("请输入服务器名称或者ip")
WScript.Echo Ping(sServer)
Function Ping(sName)
Do
Dim cPingResults, oPingResult
Set cPingResults = GetObject("winmgmts://./root/" & "cimv2").ExecQuery("SELECT " & "* FROM Win32_PingStatus WHERE " & "Address = '" & sName & "'")
On Error Resume Next
WScript.Sleep 5000
For Each oPingResult In cPingResults
If Not IsObject(cPingResults) Then
WScript.Echo "警告," & sname &"无响应"
SendMailOutlook "(目标邮件地址)", "警告", "网络不通", "(源邮件地址)"
WScript.Quit
Ping = False
ElseIf oPingResult.StatusCode = 0 Then
'通的话需要做什么写到这里
Else
WScript.Echo "警告," & sname &"无响应"
SendMailOutlook "(目标邮件地址)", "警告", "网络不通", "(源邮件地址)"
WScript.Quit
End If
Next
Loop until i<>i
End Function


Sub SendMailOutlook(aTo, Subject, TextBody, aFrom)

Dim Outlook
Set Outlook = CreateObject("Outlook.Application")

Dim Message
Set Message = Outlook.CreateItem(olMailItem)
With Message

.Subject = Subject
.Body = TextBody

.Recipients.Add (aTo)

Const olOriginator = 0
If Len(aFrom) > 0 Then .Recipients.Add(aFrom).Type = olOriginator

.Send
End With
End Sub

TOP

发邮件可以使用CDO.Message,在xp和2003都支持,具有很强的通用性。
8 C H$ Q5 |3 P' A4 J- j7 |无需安装有outlook了:)

TOP

呵呵,可是CDO.message和CDONTS.NewMail都需要装有iis smtp,而我想楼主的情况应该不会在web server上面运行脚本吧。所以我觉得还是outlook的可能性大一些,毕竟哪里都可以用.

TOP

CDO.message本机无需smtp,只需要指定smtp服务器就行。CDONTS.NewMail确实本机需要安装smtp并进行配置。

TOP

PeerMonitor用 这个软件就可以 时时监测

TOP

引用:
原帖由 ironwires 于 2007-9-2 19:32 发表 # l9 D: r: n4 y
呵呵,可是CDO.message和CDONTS.NewMail都需要装有iis smtp,而我想楼主的情况应该不会在web server上面运行脚本吧。所以我觉得还是outlook的可能性大一些,毕竟哪里都可以用.
6 h8 w& U8 i9 Y
% P+ T/ t8 X! ~* z! p% j; Z$ A5 ^2 Z0 h5 O& v U. p
Nicktang说的对,不需要本地安装iis smtp.
《无量寿经·第十八愿》言:
设我得佛,十方众生,至心信乐,欲生我国,乃至十念,若不生者,不取正觉。唯除五逆,诽谤正法。

TOP

首先声明,我个人对vbscript不是特别的熟,所以大家的代码我不是每一行都能够理解的。! H- V! d2 d) v7 W% o- s( r% Z2 ]
0 c- ]' S. p( I
但是我这里能够看到一个问题就是,不是很方便的,或者说不是很实用。
7 n; N! s, M2 K, A y f' n我想这个脚本应该是这样:
9 P: G# X: ~: g( b& P2 E7 O! H0 w 应该有至少四个文件:主机列表文件、脚本文件、瞬间(较短时间,至少是可以容忍的时间内)断线列表文件、断线列表文件。
2 I0 X/ S; }8 h- p, p0 N#不可能每增加一个服务器或者减少服务器都需要改写脚本吧,那会很烦的。
9 q7 O3 E# M5 l5 w. Q5 {, }; \8 o#脚本文件就不用说了,没有他就没有任何意义。
8 S: o& Z# O) c T3 x& n& {#持续性,不是说ping不同就表示主机有问题吧,一旦网络不通,测试主机与邮件主机不通,
4 F! g) {# Z' u" c* a1 D& V- X#瞬间的网络不稳定导致ping超时都会让脚本得结果与我们的希望相悖。$ |9 n0 _! T. r' k; }& Y
#我们所希望的,仅仅是把断线列表文件的内容及时地发送给我们。

TOP

引用:
原帖由 mwpq 于 2007-10-12 05:59 发表 : U. P- r( T& K- \- W& @
$ }8 y0 L( [0 E5 }2 S) x4 G
8 L7 E3 h% U, `9 [/ ]5 h
9 t! m* \( z# R( t# q: n. J/ p
Nicktang说的对,不需要本地安装iis smtp.
* d7 U2 @. O8 y A' {2 Y

, ?( v- [+ q" J. N6 t呵呵,我不想争什么,cdonts.newemail需要iis和smtp, cdo.message也需要本地iis或者remote smtp server,还是看看这个吧.# v, o% ^) t' g/ w n3 V

1 r. z5 M# t+ ]# I( Shttp://www.motobit.com/tips/detpg_send-email-from-asp/

TOP

引用:
原帖由 tiencosun 于 2007-10-12 11:21 发表 9 o' q% q2 ?$ v V+ r8 v
首先声明,我个人对vbscript不是特别的熟,所以大家的代码我不是每一行都能够理解的。
0 H' {3 r" o) A1 z( h( K( O1 X% K2 S. l0 {
但是我这里能够看到一个问题就是,不是很方便的,或者说不是很实用。8 n+ H$ t1 N' Q; o3 l
我想这个脚本应该是这样:
8 J' f. B1 g* h/ x8 i6 J( s7 d 应该有至少四个文件: ...
4 C+ E0 A' {3 j2 u/ o5 h$ \3 p

7 X6 l0 _* `6 s你说得很对,你在论坛里找到的所有的即兴编写的脚本都不是严格意义上的脚本程序。可是你说的那样的脚本谁会花个一天时间去写呢?仅仅为了满足别人的一个请求?很多时候连句谢谢都得不到,你会去写吗?只要能够满足求助者的要求就足够了,至少四个文件,你给我钱吗?

TOP

四个文件只有脚本需要编写,另三个只是文件名而已,与代码有何区别?
1 U# J+ k! p* j' T, h
$ r7 h4 j" P$ F% D% P4 a脚本程序本身就是即兴的,可能某一天为了一个理由编写了一个脚本用了一年而不曾更改过,这就是脚本,脚本的生命之花。

TOP

引用:
原帖由 ironwires 于 2007-10-12 19:40 发表
9 u0 Z& D$ u& W F6 E0 y! Y" J% n1 R. e6 c& a, v
6 t$ O. Q& i- i; L: u
呵呵,我不想争什么,cdonts.newemail需要iis和smtp, cdo.message也需要本地iis或者remote smtp server,还是看看这个吧.
, G5 f: L8 h& i. |8 {4 l
1 I( A: m% Q' ehttp://www.motobit.com/tips/detpg_send-email-from-asp/
0 u4 U% k3 k; F- G3 a" [: ` O7 J- K$ |* |2 A! h, {+ }
您可以查一下我在《微软网络技术》区发的一个vbscript 发邮件的帖子,我在xp计算机上运行没有问题。 既然是发邮件,当然需要smtp server,本地远程都可以。iis我觉得不需要。
《无量寿经·第十八愿》言:
设我得佛,十方众生,至心信乐,欲生我国,乃至十念,若不生者,不取正觉。唯除五逆,诽谤正法。

TOP