batch Telnet的步驟與操作
batch Telnet是遠程批處理的工作。那么如何進行這個batch Telnet設置呢?下面我們來對這方面的有關內容進行一下分析。首先我們需要了解一下最初的方法。
兩種辦法可以實現bat轉換為EXE
有兩種辦法可以實現bat轉換為EXE,一種是利用工具,如DOS下的bat2exe工具;另一種方法是在VB中使用Shell函數,其形式如下(結束后DOS窗口會自行關閉):
Shell "command.com /c copy c:\1.txt a:\",vbNormalFocus
如何在批處理中運行Telnet自動任務?
一般來說ftp做batch處理事務時非常常見的事情。那么如果Batch Telnet,讓我們的管理工作更加的輕松呢?
一般來說兩種方法:
1、VBS法(Windows Script Host)
2、自動終端法(一些可以配置自動Telnet的終端)
在這里我們討論第一種方法:VBS法。由于Windows Script Host是系統自帶的,我們不需要安裝地方放軟件就可以搞定。所以它一般是解決問題的首選。
首先,我們建立一個名字叫做tel.vbs的腳本,這里用Telnet 到cisco路由器上作為一個例子,相關內容大家可以修改。
- ’建立Shell對象
- set sh=WScript.CreateObject("WScript.Shell")
- WScript.Sleep 1000
- ’向Telnet發送我們平時錄入的命令
- 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
- ’運行cisco的show run命令
- sh.SendKeys "show run{ENTER}"
然后,建立一個batch_tel.bat的批處理文件:
- rem 啟動Telnet
- start Telnet.exe
- rem batch Telnet
- cscript //nologo tel.vbs
最后,我們只需要運行batch_tel.bat就可以輕松搞定Telnet的工作了。
對于SendKeys這個命令可以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一個應用程序并等待該程序執行完畢后繼續運行
Shell & Wait 的程序怎么寫? 希望某一 VB 程序利用 Shell 執行某一個外部程序(假設是 notepad.exe)之后, 就一直等到此一程序結束執行時, 才回到 VB 程序繼續執行, 該怎么辦到呢? 當我們調用 Shell 時, 會傳回一個數值, 此一數值稱為 Process Id, 利用此 一 Process Id, 我們可以調用 OpenProcess API 取得 Process Handle, 然后 再利用 Process Handle 調用 WaitForSingleObject, 即可等待被 Shell 執行的 程序執行完畢, 才繼續向下執行。細節如下:
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
注:如果以上的聲明放在「一般模塊」底下, 應將 Declare 之前的 Private 保 留字去掉, 并且在 Const 之前加上 Public 保留字。
2. 程序范例:(以執行 Notepad 程序為例)
- Dim pId As Long, pHnd As Long ’分別聲明 Process Id 及 Process Handle 變 數
- pId = Shell("Notepad", vbNormalFocus) ’Shell 傳回
- Process Id pHnd = OpenProcess(SYNCHRONIZE, 0, pId) ’ 取得 Process Handle
- If pHnd <> 0 Then Call WaitForSingleObject(pHnd, INFINITE) ’ 無限等待,直到程序結束
- Call CloseHandle(pHnd)
- End If