注:本文系博主原创文章,转载请注明出处。
===========================================一号分割线========================================
思科、华为等多层交换机一般都自带了板卡温度检测功能,对于这些骨干机房,若没有安装温度报警远程监控等设备的,可以使用思科、华为设备的温度自检功能来实现对机房温度的控制。
系统的实现的过程是,登陆相应的设备,使用show environment 命令,查询温度,再利用VB脚本功能,提取出相应的关键字,并判断温度。此外再结合计划任务功能,可以实现定时检测报警功能。
这边仅以Cisco 7609,4006等设备为例,说明其实现的过程。
-----------------------------------分割线------------------------------------------------
第一步:SecureCRT脚本编写,代码如下
#$language = "VBScript"
#$interface = "1.0"
'||=================================||
'||Query BackBone Switch Temperature||
'||Edit By 王敩 ||
'||2009-6-26 ||
'||Ver 1.0 ||
'||=================================||
'===========Start Define Global Parameters=========
Dim FSO
Dim line
Dim SwitchArr(4,3) '设备列表,行数代表设备数量,列用于存放相关数据
Dim SplitKeyW(4,2) '取字符用关键字列表
Dim TempString '临时存放温度相关行
Dim NowRow '存放当前光标所在行号
'常量定义
Const ForReading = 1
Const ForAppending=8
Const ForWriting=2
Const HighTemperatureAlarmFile="D:\SecureScript\roomtemphigh.wav"
Const HighTemperatureShowFile="D:\温度过高.txt"
beep = chr(007)
'定义数据库连接
Set conn=CreateObject("ADODB.Connection")
conn.Open"driver={sql server};server=x.x.x.x;uid=sa;pwd=sa;"&"database=NMC;"
'数组定义
SwitchArr(0,0)="x.x.x.x"
SwitchArr(0,1)="19" '代表温度关键字所在的行,用于SecureCRT
SwitchArr(0,2)="设备一"
SwitchArr(1,0)="y.y.y.y"
SwitchArr(1,1)="4"
SwitchArr(1,2)="设备二"
SwitchArr(2,0)="z.z.z.z"
SwitchArr(2,1)="4"
SwitchArr(2,2)="设备三"
SwitchArr(3,0)="w.w.w.w"
SwitchArr(3,1)="4"
SwitchArr(3,2)="设备四"
SplitKeyW(0,0)="temperature:" '温度字符前面的字符
SplitKeyW(0,1)="C" '温度字符后面的字符
SplitKeyW(1,0)="="
SplitKeyW(1,1)="degre"
SplitKeyW(2,0)="="
SplitKeyW(2,1)="degre"
SplitKeyW(3,0)="="
SplitKeyW(3,1)="degre"
'==============================Main Sub=======================================================
Sub main
'数据库路径及连接参数
pass="*******" '登陆设备的密码
username="*******" '登陆设备的用户名
For i=0 To 3
'连接设备,通过堡垒主机中转
crt.Screen.WaitForString "2,3]"
crt.Screen.Send "1" & VbCr
crt.Screen.WaitForString "ip address and Enter:"
crt.Screen.Send SwitchArr(i,0) & VbCr
'crt.sleep 2000
If (crt.Screen.WaitForString("Username:",5))=True Then
crt.Screen.Send username & VbCr
crt.Screen.WaitForString("Password:")
crt.Screen.Send pass & VbCr
crt.Screen.WaitForString ">",5
crt.Screen.Send "show environment temperature" & VbCr
crt.Screen.WaitForString ">",5
NowRow=crt.Screen.CurrentRow '取得当前光标所在行号
TempString=crt.Screen.Get2 (NowRow-Int(SwitchArr(i,1)),1,NowRow-Int(SwitchArr(i,1)),50) '提取温度所在行
KeyStringStart=InStr(TempString,SplitKeyW(i,0))
KeyStringEnd=InStr(TempString,SplitKeyW(i,1))
If KeyStringStart<>0 And KeyStringEnd<>0 Then
TemperatureStr=Mid(TempString,KeyStringStart+Len(SplitKeyW(i,0)),KeyStringEnd-(KeyStringStart+Len(SplitKeyW(i,0))))
'温度大于36度报警,一般36度对应机房温度在23度左右
If Int(TemperatureStr)>36 Then
set wshShell = CreateObject("wscript.Shell")
'使用文本文件显示报警,同时播放五次声音
WshShell.Run "cmd /c @echo 时间:{"&Now()&"}机房:{"&SwitchArr(i,2)&"温度过高:"&TemperatureStr&"度}>"&HighTemperatureShowFile
WshShell.Run "notepad.exe "&HighTemperatureShowFile
'WshShell.Run "cmd /c @echo " & beep& beep& beep& beep, 0
WshShell.Run HighTemperatureAlarmFile
crt.sleep 2000
WshShell.Run HighTemperatureAlarmFile
crt.sleep 2000
WshShell.Run HighTemperatureAlarmFile
crt.sleep 2000
WshShell.Run HighTemperatureAlarmFile
crt.sleep 2000
End If
'准备将温度写入数据库
strSqlInsert="insert into AutoLog_RoomTemperature (TemperatureTime,Temperature,TemperatureRoom) values ('"&Now()&"','"&TemperatureStr&"','"&SwitchArr(i,2)&"')"
conn.Execute(strSqlInsert)
Else
set wshShell = CreateObject("wscript.Shell")
WshShell.Run "cmd /c @echo 时间:{"&Now()&"}机房:{"&SwitchArr(i,2)&"关键字出错,开始字符:{"&KeyStringStart&"}结束字符:{"&KeyStringEnd&"}"
WshShell.Run "notepad.exe "&HighTemperatureShowFile
End If
crt.Screen.Send "exit" & VbCr
End If
Next
crt.Screen.WaitForString "2,3]"
crt.Screen.Send "3" & VbCr
crt.session.disconnect()
crt.quit
End Sub
---------------------------------------分割线-----------------------------------------------
完了后保存为vbs文件,同时在SecureCrt里创建一会话,名字为checkTemperature,并勾选登陆脚本,选择该脚本。
然后再创建一计划任务,任务运行"C:\Program Files\SecureCRT\SecureCRT.EXE" /S checkTemperature,日程安排 里高级选项中使用重复任务,每20分钟检测一次。
然后就可以测试运行效果了。
总结:
该脚本考虑到实际情况,一般监控中心肯定有人在的,所以没有加入登陆失败的处理代码;登陆出错时,人工操作一下就行了,一般是由于网络时延过大引起的。有需要的朋友可以自己加。
华为的设备原理是一样的,只不过关键字可能不一样。大家可以自己根据情况添加。
欢迎大家共同讨论与提高
来源:http://blog.sina.com.cn/s/blog_49cd61e70100drhx.html
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/3613/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
评论列表