batch Telnet的步驟與操作
batch Telnet是遠(yuǎn)程批處理的工作。那么如何進(jìn)行這個(gè)batch Telnet設(shè)置呢?下面我們來(lái)對(duì)這方面的有關(guān)內(nèi)容進(jìn)行一下分析。首先我們需要了解一下最初的方法。
兩種辦法可以實(shí)現(xiàn)bat轉(zhuǎn)換為EXE
有兩種辦法可以實(shí)現(xiàn)bat轉(zhuǎn)換為EXE,一種是利用工具,如DOS下的bat2exe工具;另一種方法是在VB中使用Shell函數(shù),其形式如下(結(jié)束后DOS窗口會(huì)自行關(guān)閉):
Shell "command.com /c copy c:\1.txt a:\",vbNormalFocus
如何在批處理中運(yùn)行Telnet自動(dòng)任務(wù)?
一般來(lái)說(shuō)ftp做batch處理事務(wù)時(shí)非常常見(jiàn)的事情。那么如果Batch Telnet,讓我們的管理工作更加的輕松呢?
一般來(lái)說(shuō)兩種方法:
1、VBS法(Windows Script Host)
2、自動(dòng)終端法(一些可以配置自動(dòng)Telnet的終端)
在這里我們討論第一種方法:VBS法。由于Windows Script Host是系統(tǒng)自帶的,我們不需要安裝地方放軟件就可以搞定。所以它一般是解決問(wèn)題的首選。
首先,我們建立一個(gè)名字叫做tel.vbs的腳本,這里用Telnet 到cisco路由器上作為一個(gè)例子,相關(guān)內(nèi)容大家可以修改。
- ’建立Shell對(duì)象
- set sh=WScript.CreateObject("WScript.Shell")
- WScript.Sleep 1000
- ’向Telnet發(fā)送我們平時(shí)錄入的命令
- sh.SendKeys "open 192.168.1.1"
- WScript.Sleep 1000
- sh.SendKeys "{ENTER}"
- WScript.Sleep 1000
- sh.SendKeys "password{ENTER}"
- WScript.Sleep 1000
- sh.SendKeys "en{ENTER}"
- WScript.Sleep 1000
- sh.SendKeys "passord{ENTER}"
- WScript.Sleep 1000
- ’運(yùn)行cisco的show run命令
- sh.SendKeys "show run{ENTER}"
然后,建立一個(gè)batch_tel.bat的批處理文件:
- rem 啟動(dòng)Telnet
- start Telnet.exe
- rem batch Telnet
- cscript //nologo tel.vbs
最后,我們只需要運(yùn)行batch_tel.bat就可以輕松搞定Telnet的工作了。
對(duì)于SendKeys這個(gè)命令可以send什么,我們可以看下面的列表:
- BACKSPACE {BACKSPACE}, {BS}, or {BKSP}
- BREAK {BREAK}
- CAPS LOCK {CAPSLOCK}
- DEL ;or DELETE {DELETE} or {DEL}
- DOWN ARROW {DOWN}
- END {END}
- ENTER {ENTER}or ~
- ESC {ESC}
- HELP {HELP}
- HOME {HOME}
- INS or INSERT {INSERT} or {INS}
- LEFT ARROW {LEFT}
- NUM LOCK {NUMLOCK}
- PAGE DOWN {PGDN}
- PAGE UP {PGUP}
- PRINT SCREEN {PRTSC}
- RIGHT ARROW {RIGHT}
- SCROLL LOCK {SCROLLLOCK}
- TAB {TAB}
- UP ARROW {UP}
- F1 {F1}
- F2 {F2}
- F3 {F3}
- F4 {F4}
- F5 {F5}
- F6 {F6}
- F7 {F7}
- F8 {F8}
- F9 {F9}
- F10 {F10}
- F11 {F11}
- F12 {F12}
- F13 {F13}
- F14 {F14}
- F15 {F15}
- F16 {F16}
- SHIFT +
- CTRL ^
- ALT %
Shell一個(gè)應(yīng)用程序并等待該程序執(zhí)行完畢后繼續(xù)運(yùn)行
Shell & Wait 的程序怎么寫(xiě)? 希望某一 VB 程序利用 Shell 執(zhí)行某一個(gè)外部程序(假設(shè)是 notepad.exe)之后, 就一直等到此一程序結(jié)束執(zhí)行時(shí), 才回到 VB 程序繼續(xù)執(zhí)行, 該怎么辦到呢? 當(dāng)我們調(diào)用 Shell 時(shí), 會(huì)傳回一個(gè)數(shù)值, 此一數(shù)值稱為 Process Id, 利用此 一 Process Id, 我們可以調(diào)用 OpenProcess API 取得 Process Handle, 然后 再利用 Process Handle 調(diào)用 WaitForSingleObject, 即可等待被 Shell 執(zhí)行的 程序執(zhí)行完畢, 才繼續(xù)向下執(zhí)行。細(xì)節(jié)如下:
1. API 的聲明:
- Const SYNCHRONIZE = &H100000
- Const INFINITE = &HFFFFFFFF
- Private Declare Function OpenProcess Lib "kernel32" (ByVal
- dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId
- As Long) As Long
- Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As
- Long) As Long
- Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal
- hHandle As Long, ByVal dwMilliseconds As Long) As Long
注:如果以上的聲明放在「一般模塊」底下, 應(yīng)將 Declare 之前的 Private 保 留字去掉, 并且在 Const 之前加上 Public 保留字。
2. 程序范例:(以執(zhí)行 Notepad 程序?yàn)槔?
- Dim pId As Long, pHnd As Long ’分別聲明 Process Id 及 Process Handle 變 數(shù)
- pId = Shell("Notepad", vbNormalFocus) ’Shell 傳回
- Process Id pHnd = OpenProcess(SYNCHRONIZE, 0, pId) ’ 取得 Process Handle
- If pHnd <> 0 Then Call WaitForSingleObject(pHnd, INFINITE) ’ 無(wú)限等待,直到程序結(jié)束
- Call CloseHandle(pHnd)
- End If