引言:批處理(Batch),也稱為批處理腳本。顧名思義,批處理就是對某對象進(jìn)行批量的處理,通常被認(rèn)為是一種簡化的腳本語言。批處理程序雖然是在命令行環(huán)境中運(yùn)行,但不僅僅能使用命令行軟件,任何當(dāng)前系統(tǒng)下可運(yùn)行的程序都可以放在批處理文件中運(yùn)行。
作者所在單位要部署一套溫濕度監(jiān)控系統(tǒng)。該系統(tǒng)由華圖S400W無線溫濕度記錄儀、HE2400無線基站和監(jiān)控軟件組成。一個或多個無線溫濕度記錄儀探測環(huán)境溫濕度,通過RF射頻傳送給該環(huán)境中的無線基站,無線基站經(jīng)有線或無線局域網(wǎng)將監(jiān)測數(shù)據(jù)通過UDP協(xié)議傳送至監(jiān)控服務(wù)器??蛻舳送ㄟ^B/S結(jié)構(gòu)可查看溫濕度記錄,接收報(bào)警。
該系統(tǒng)有40多個無線基站接入到二層交換機(jī),局域網(wǎng)為核心、接入兩層結(jié)構(gòu),接入層交換機(jī)有30多臺,按部門劃分了30多個VLAN,為管理方便,部署中需將所有的無線基站劃歸同一VLAN。如果手工為所有無線基站調(diào)整VLAN、分配固定IP,工作量龐大,因此想用批處理來實(shí)現(xiàn)。
圖1 網(wǎng)絡(luò)拓?fù)鋱D
首先:每個無線基站均有MAC地址,先統(tǒng)一把所有無線基站逐一連接筆記本電腦,預(yù)先設(shè)置好固定IP,192.168.31.0/24網(wǎng)段,并記錄下其MAC地址;
然后,將所有無線基站部署到各監(jiān)測點(diǎn),開機(jī);
最后,在局域網(wǎng)中一臺電腦上運(yùn)行批處理程序,輸入MAC地址,即可找到該基站所連接的交換機(jī)端口,將端口劃至VLAN 31。
批處理中需先Telnet至核心交換機(jī),查找指定MAC所直連的二層交換機(jī),再Telnet至二層交換機(jī),找到該MAC所連接的端口,并修改端口的VLAN號。然而批處理在使用Telnet時無法自動輸入Telnet登錄密碼,而VBscript腳本使用SendKeys命令能做到,因此若把二者結(jié)合使用,就能達(dá)到想要的效果。網(wǎng)絡(luò)拓?fù)淙鐖D1所示。
FindMac.bat批處理內(nèi)容如下:
@rem 第一步:輸入MAC地址,Telnet核心交換機(jī)查找該MAC所連接的核心交換機(jī)端口
@set /p mymac=請輸入要查找的MAC:
@del c: elcore.vbs
@echo on error resumenext >>c: elcore.vbs
@echo dim WshShe ll>>c: elcore.vbs
@echo Set WshSh ell=WScript.CreateObje ct("WScript.Shell")>>c: elcore.vbs
@echo WshShell.run"c md">>c: elcore.vbs
@echo WshShell.App Activate"c:windowssys tem32cmd.exe">>c: elc ore.vbs
@echo WScript.Sleep 200>>c: elcore.vbs
@echo WshShell.SendKeys"telnet 192.16 8.1.254{ENTER}">>c: elcore.vbs
@echo WScript.Sleep 100>>c: elcore.vbs
@echo WshShell.AppActivate"telnet.exe">>c: elcore.vbs
@echo WScript.Sleep 2000>>c: elcore.vbs
@echo WshShell.SendKey s"jikon {ENT ER}">>c: elcore.vbs
@echo WScript.Sleep 2000>>c: elcore.vbs
@echo WshShell.Send Keys"sh mac add add %m ymac%{ENTER}">>c: elcore.vbs
@echo WScript.Sleep 1000>>c: elcore.vbs
@echo WshShell.SendKeys"sh cdp nei{ENT ER}">>c: elcore.vbs
@echo WScript.Sleep 1000>>c: elcore.vbs
@call c: elcore.vbs
@rem 第二步:輸入二層交換機(jī)的管理IP,查找該MAC所連接的二層交換機(jī)端口
@cls
@set /p sw=請輸入該MAC所連接的二層交換機(jī)IP:
@del c: elsw.vbs
@echo on error resumenext >>c: elsw.vbs
@echo dim WshSh ell>>c: elsw.vbs
@echo Set WshSh ell= WScript.CreateObject("WScript.Shell")>>c: e lsw.vbs
@echo WshShell.ru n"cmd">>c: elsw.vbs
@echo WshShell.App Activate"c:windowssy stem32cmd.exe">>c: elsw.vbs
@echo WScript.Sleep 200>>c: elsw.vbs
@echo WshShell.Send Keys"telnet %sw%{EN TER}">>c: elsw.vbs
@echo WScript.Sleep 100>>c: elsw.vbs
@echo WshShell.App Activate"telnet.exe ">>c: elsw.vbs
@echo WScript.Sleep 2000>>c: elsw.vbs
@echo WshShell.SendKeys"jikong{EN TE R}">>c: elsw.vbs
@echo WScript.Sleep 2000>>c: elsw.vbs
@echo WshShell.SendKeys"sh mac addadd%mymac%{ENTER}">>c: elsw.vbs
@echo WScript.Sleep 1000>>c: elsw.vbs
@echo WshShell.SendKeys"sh cdp nei{EN TER}">>c: elsw.vbs
@echo WScript.Sleep 1000>>c: elsw.vbs
@call c: elsw.vbs
@rem 第三步:輸入二層交換機(jī)的管理IP,查找該MAC直連的二層交換機(jī)端口
@cls
@set /p swzl=請輸入該MAC所直連的二層交換機(jī)IP:
@del c: elswzl.vbs
@echoon error resume next >>c: elswzl.vbs
@echodim WshShell>>c: elswzl.vbs
@echo Set WshSh ell= WScript.CreateObject("WScript.Shell")>>c: elswzl.vbs
@echo WshShell.run"cmd">>c: elswzl.vbs
@echo WshShell.App Activate"c:windowssys tem32cmd.exe">>c: elswzl.vbs
@echo WScript.Sleep 200>>c: elswzl.vbs
@echo WshShell.SendKeys"telnet %swz l%{ENTER}">>c: elsw zl.vbs
@echo WScript.Sleep 100>>c: elswzl.vbs
@echo WshShell.AppActivate"telnet.exe">>c: elswzl.vbs
@echo WScript.Sleep 2000>>c: elswzl.vbs
@echo WshShell.SendKeys"jik ong{ENT ER}">>c: elswzl.vbs
@echo WScript.Sleep 2000>>c: elswzl.vbs
@echo WshShell.Sen dKeys"sh mac add add%mymac%{ENTER}">>c: elswzl.vbs
@echo WScript.Sleep 1000>>c: elswzl.vbs
@call c: elswzl.vbs
@rem 第四步:輸入二層交換機(jī)端口號,修改VLAN
@cls
@set /p swzldk=請輸入該MAC所直連的二層交換機(jī)端口號:
@del c: elswzldk.vbs
@echo on error resume next >>c: elswzldk.vbs
@echo dim WshShell>>c: elswzldk.vbs
@echo Set WshShell=WScript.Creat eObj ec t("WScript.Shell")> >c: elswzldk.vbs
@echo WshShell.run"cmd">>c: elswzldk.vbs
@echo WshShell.App Activate"c:windowssys tem32cmd.exe">>c: elswzldk.vbs
@echo WScript.Sleep 200>>c: elswzldk.vbs
@echo WshShell.SendKeys"telnet %swzl%{ENTER}">>c: elswzl dk.vbs
@echo WScript.Sleep 100>>c: elswzldk.vbs
@echo WshShell.AppActivate"telnet.exe">>c: elswzldk.vbs
@echo WScript.Sleep 2000>>c: elswzldk.vbs
@echo WshShell.SendKeys"jikong{EN TER}">>c: elswzldk.vbs
@echo WScript.Sleep 2000>>c: elswzldk.vbs
@echo WshShell.SendKeys"en{ENTER}">>c: elswzldk.vbs
@echo WScript.Sleep 1000>>c: elswzldk.vbs
@echo Wsh Shell.SendKeys "jikong{EN TER}">>c: elswzldk.vbs
@echo WSc ript.Sleep 2000>>c: elswzldk.vbs
@echo WshShell.SendKeys"conf t{ENT ER}">>c: elswzldk.vbs
@echo WSc ript.Sleep 1000>>c: elswzldk.vbs
@echo Wsh Sh ell.SendKeys"int f0/%swzld k%{ENTER}">>c: elswzldk.vbs
@echo WScript.Sleep 1000>>c: elswzldk.vbs
@echo WshShell.SendKeys"swit acce vlan 31{ENTER}">>c: elswzldk.vbs
@echo WScript.Sleep 1000>>c: elswzldk.vbs
@echo WshShell.SendKeys"no shut{EN TER}">>c: elswzldk.vbs
@echo WScript.Sleep 1000>>c: elswzldk.vbs
@echo WshShell.SendKeys"end{ENTER}">>c: elswzldk.vbs
@echo WScript.Sleep 1000>>c: elswzldk.vbs
@echo WshShell.SendKeys"wr{ENTER}">>c: elswzl dk.vbs
@echo WScript.Sleep 1000>>c: elswzldk.vbs
@call c: elswzldk.vbs
@rem 清除所定義的變量
@set mymac=
@set sw=
@set swzl=
@set swzldk=
批處理運(yùn)行過程的解釋:
圖2 輸入MAC地址
圖3 核心交換機(jī)連接拓?fù)?/p>
圖4 輸入二層交換機(jī)IP地址
圖5 二層交換機(jī)連接拓?fù)?/p>
圖6 輸入直連的二層交換機(jī)IP地址
第一步:定義變量mymac,讓用戶從鍵盤輸入無線基站的MAC地址,將第一段代碼追加到telcore.vbs文件并調(diào)用,即Telnet核心交換機(jī)192.168.1.254,查找該MAC所連接的核心交換機(jī)端口。
拓?fù)渲酗@示核心交換機(jī)通過光纖連接了9臺二層交換機(jī),該MAC地址連接在Gi3/1端口所連接的二層交換機(jī)上,該二層交換機(jī)名稱是Z2FN1,對telswzl.vbs的調(diào)用完成。用戶查找交換機(jī)hostname命名表,找到Z2FN1的IP是192.168.1.201。
第二步:定義變量sw,讓用戶從鍵盤輸入二層交換機(jī)Z2FN1的管理IP地址192.168.1.201,將第二段代碼追加到telsw.vbs文件并調(diào)用,即Telnet二層交換機(jī) 192.168.1.201,查找該MAC所連接的二層交換機(jī)端口。
拓?fù)渲酗@示二層交換機(jī)Z2FN1共連接了3臺交換機(jī)機(jī),即Gi0/1口通過光纖連接核心交換機(jī)、GI0/2千兆電口連接二層交換機(jī)Z2FN2、百兆電口Fa0/46連接二層交換機(jī)Z2FD1。該MAC地址連接在Gi0/2端口所連接的二層交換機(jī)上,該二層交換機(jī)名稱是Z2FN2,對telsw.vbs的調(diào)用完成。用戶查找交換機(jī)hostname命名表,找到Z2FN2的IP是192.168.1.202。
第三步:定義變量swzl,讓用戶從鍵盤輸入二層交換機(jī)Z2FN2的管理IP地址192.168.1.202,將第三段代碼追加到telswzl.vbs文件并調(diào)用,即Telnet二層交換機(jī) 192.168.1.202,查找該MAC直連的二層交換機(jī)端口。
顯示該無線基站連接在192.168.1.202這臺二層交換機(jī)的Fa0/8百兆電口上,對telswzl.vbs的調(diào)用完成。
圖7 找到端口號
圖8 輸入端口號
圖9 將端口加入VLAN31
第四步:定義變量swzldk,讓用戶從鍵盤輸入端口號8,將第四段代碼追加到telswzldk.vbs文件并調(diào)用,將端口加入VLAN 31,啟用端口并保存。
最后,刪除所定義的4個變量。至此批處理結(jié)束。
如果網(wǎng)絡(luò)拓?fù)錇楹诵膶?、匯聚層、接入層的三層結(jié)構(gòu),此過程還要增加一個步驟。顯然,該批處理還不夠智能化,最理想的結(jié)果是用戶只需輸入MAC地址,所有的工作自動完成,因此尚需進(jìn)一步優(yōu)化,而其復(fù)雜度和代碼量將大大增加。