1. 程式人生 > >利用SecureCRT的VBScript進行自動化控制

利用SecureCRT的VBScript進行自動化控制

在SecureCRT中使用VBSCRIPT指令碼,確實能夠提高我們的工作效率,並且可以實現完全的自動化。

SecureCRT給我們提供了很好的平臺——指令碼工具製作和執行。下面就SecureCRT工具常用到的幾個函式闡述如下:

1. 在SecureCRT裡,用得最多的應該就是crt.Screen,基本上很多操作都是基於螢幕的返回字來決定下一步該作何操作:

(1):crt.Screen.WaitForString("KeyString",timewaiting)

該函式是單字串判斷,KeyString是需要查詢的關鍵字,timewaiting是一個超時閥值,例如:crt.Screen.WaitForString("people:",5)該行程式碼的意思就是在5秒內沒有檢測到people:出現,就執行下一條語句,如果改成:crt.Screen.WaitForString("people:")那就是指直到people:出現才執行下一行程式碼。

WaitForString是有返回值的,返回值是True 或者 False。因此,可以根據返回值進行條件判斷以確定一下條程式碼。例如:

If (crt.Screen.WaitForString ("current state : UP",1)<>False) Then 
portStatus="PortUP" 
Else 
portStatus="PortDown" 
End If

msgbox portStatus

這段程式碼用於判斷埠狀態情況並記錄下來.

(2):crt.Screen.WaitForStrings("KeyString1","KeyString2",...,timeout)

用於多個字串的判斷,timeout的作用是一樣的。例如:

crt.Screen.WaitForStrings("cisco","huawei","H3C",5)

意思就是在5秒內有檢測到相應的字元時,返回相應的索引號(索引號是從1開始的)。如果都沒有檢查到,則返回0.因此,該函式的使用可以如下:

Dim SwitchKey

SwitchKey=crt.Screen.WaitForStrings("cisco","huawei","H3C",5)

Select case SwitchKey

case 1

MsgBox "思科裝置"

case 2

MsgBox "華為裝置"

case 3

MsgBox "華三裝置"

case else

MsgBox "未知裝置"

End Select

(3) 其實SecureCRT支援的指令碼語言就是VBS,這個指令碼語言與VB有較大的不同,對於介面的支援性較差。不過也有幾個對話性的函式

<1>、InputBox :提示使用者輸入引數

temp = inputbox("提示使用者你輸入引數的名稱","對話方塊的名稱") :需要將輸入的引數賦值給某一個引數進行使用。

<2>、輸出函式 msgbox

msgbox “給使用者輸出的資訊對話方塊”

eg.求正方形面積的指令碼

dim r,s 
r=inputbox("請輸入正方形的邊長:","求正方形面積的程式") 
s=r*r 
msgbox(s)

-------------------------------------------------------------------------------------------

語句結構:

1. 順序執行的指令碼,舉個網上氾濫的例子,那個自動登入系統的例子,稍加修改如下。

# $language = "VBScript" 
# $interface = "1.0"

Sub Main 
'連線主機192.168.0.2 
crt.session.Connect("/telnet 192.168.0.2") 
'等待出現登陸使用者名稱提示login,等待時間是10s 
crt.screen.WaitForString "login:",10 
'輸入使用者名稱,回車 
crt.screen.send "minico" & Chr(13) 
'等待出現登陸密碼提示login,等待時間是10s 
crt.screen.WaitForString "Password:",10 
'輸入密碼,回車 
crt.screen.send "123456"

crt.screen.send Chr(13) 
End Sub

2. 選擇結構的指令碼

if ... then ...else...結構和case結構見基礎知識舉例

3. 迴圈結構

指令碼例項

#=====================================================

# $language = "VBScript" 
# $interface = "1.0" 
'=============================================================================================' 
'    程式名稱:AIX.VBS 
'    程式說明:AIX主機系統配置/巡檢指令碼 
'    作者:鄭繼東 
'    完成時間:2008-5-7 
'============================================================================================='

'=============================================================================================' 
'    程式全域性變數區 
'=============================================================================================' 
dim ip

'=============================================================================================' 
'    程式全域性常量區 
'=============================================================================================' 
' button parameter options 
Const ICON_STOP = 16                 ' display the ERROR/STOP icon. 
Const ICON_QUESTION = 32             ' display the '?' icon 
Const ICON_WARN = 48                 ' display a '!' icon. 
Const ICON_INFO= 64                  ' displays "info" icon. 
Const BUTTON_OK = 0                  ' OK button only 
Const BUTTON_CANCEL = 1              ' OK and Cancel buttons 
Const BUTTON_ABORTRETRYIGNORE = 2    ' Abort, Retry, and Ignore buttons 
Const BUTTON_YESNOCANCEL = 3         ' Yes, No, and Cancel buttons 
Const BUTTON_YESNO = 4               ' Yes and No buttons 
Const BUTTON_RETRYCANCEL = 5         ' Retry and Cancel buttons 
Const DEFBUTTON1 = 0        ' First button is default 
Const DEFBUTTON2 = 256      ' Second button is default 
Const DEFBUTTON3 = 512      ' Third button is default

' Possible MessageBox() return values 
Const IDOK = 1              ' OK button clicked 
Const IDCANCEL = 2          ' Cancel button clicked 
Const IDABORT = 3           ' Abort button clicked 
Const IDRETRY = 4           ' Retry button clicked 
Const IDIGNORE = 5          ' Ignore button clicked 
Const IDYES = 6             ' Yes button clicked 
Const IDNO = 7              ' No button clicked

'=============================================================================================' 
'    程式輔助函式區 
'============================================================================================='

'登陸函式 
Function login 
    '定義IP地址,登陸使用者名稱,密碼變數 
    dim    passwd 
    dim username

    Dim result 
    Dim flag 
    flag =1 
    '斷開主機連線 
    crt.session.Disconnect

    '開啟對話方塊,取得IP地址,登陸使用者名稱稱,密碼等變數 
    ip = crt.Dialog.Prompt("請輸入伺服器IP地址:", "AIX", "192.1.1.207", false) 
    If (Trim(ip) = "")  Or (ip = IDABORT) Then 
        result = crt.Dialog.MessageBox("您沒有輸入登陸的IP地址,CRT將被退出!", "提示資訊",ICON_INFO) 
        crt.quit 
    End If

    flag =1 
    While flag = 1 
        username = crt.Dialog.Prompt("請輸入登陸使用者名稱:", "AIX", "root", false) 
        If     username = IDABORT Then 
            result = crt.Dialog.MessageBox("您選擇了沒有輸入使用者名稱稱,CRT將被推出!", "提示資訊",ICON_INFO)            
            crt.quit 
        End If

        If (Trim(username) = "")Then 
            result = crt.Dialog.MessageBox("請輸入登陸使用者名稱稱!", "提示資訊",ICON_INFO) 
        Else 
            flag = 0 
        End If 
    wend

    passwd = crt.Dialog.Prompt("請輸入登陸使用者密碼:", "AIX", "congine", true)

    '連線主機 
    crt.screen.Synchronous = true 
    crt.session.Connect("/telnet " & ip) 
    '等待出現登陸使用者名稱提示login,等待時間是10s 
    crt.screen.WaitForString "login:" 
    '輸入使用者名稱,回車 
    crt.screen.send username & chr(13)

    '等待出現登陸密碼提示login,等待時間是10s 
    crt.screen.WaitForString "Password:" 
    '輸入密碼,回車 
    crt.screen.send passwd & chr(13) 
    If crt.screen.WaitForString("invalid login name or password", 3) = True Then 
        result = crt.Dialog.MessageBox("伺服器登陸失敗,請檢查IP地址、使用者名稱、密碼是否輸入正確!", "提示資訊",ICON_INFO) 
        crt.quit 
    End If 
    crt.screen.Synchronous = false 
End Function

'記錄當前會話日誌函式 
Function writelog    
    Dim result 
    Dim logfilename 
    Dim flag 
    flag =1

    While flag =1 
        logfilename = crt.Dialog.Prompt("請輸入本次會話LOG檔案位置", "AIX", "c:\"  & ip &".log", false) 
        If Trim(logfilename) = ""  Or  (logfilename = IDABORT) then 
            result = crt.Dialog.MessageBox("強烈建議儲存會話日誌", "提示資訊",ICON_INFO) 
        Else 
            flag = 0 
        End if 
    wend 
    crt.session.LogFileName = logfilename 
    crt.session.Log(true) 
End Function

Function  setline 
    crt.screen.send chr(13) & chr(13) 
'    crt.Sleep 1000 
End Function

Function setcommand(cmdstr, sec) 
    setline 
    sec = sec * 1000 
    crt.screen.send cmdstr & Chr(13) 
    crt.Sleep sec 
End Function

'取得伺服器基本資訊 
Function get_machinfo

    '主機基本資訊 
    setcommand "hostname",1 
    setcommand "prtconf |grep 'Machine Serial Number'",6 
    '主機裝置情況 
    setcommand "lsdev -C |grep proc",2 
    setcommand "lsattr -El mem0",2 
    setcommand "lsdev -Cc disk",2 
    setcommand "lsdev -Cc adapter",2 
    setcommand "lsdev -Cc tape",2

    '主機網絡卡情況 
    setcommand "ifconfig -a",2 
    setcommand "more /etc/hosts",2

    '主機軟體資訊 
    setcommand "uname -a ",2 
    setcommand "oslevel -s",5 
    setcommand "instfix -i |grep ML",10

    '主機卷組資訊 
    setcommand "lsvg ",2 
    setcommand "lsvg -o",2 
    setcommand "lsvg -l rootvg",2

    '主機檔案系統資訊 
    setcommand "df -g ",2

    '主機日誌資訊 
    setcommand "errpt ",2 
    setcommand "errpt  -a",2 
    setcommand "sysdumpdev -l ",2

    '主機系統性能 
    setcommand "lsps -a",2 
    setcommand "vmstat 2 10",25 
    setcommand "iostat 2 10",25

End Function

'=============================================================================================' 
'    程式主函式(main)區 
'============================================================================================='

'主函式 
Sub Main 
    Dim result 
'    crt.screen.Synchronous = true 
    '系統登陸 
    login

    '寫日誌 
    writelog

    '取得伺服器資訊 
    get_machinfo 
    result = crt.Dialog.MessageBox("資訊收集完畢,是否推出CRT?", "提示資訊", ICON_QUESTION Or BUTTON_YESNO Or DEFBUTTON2) 
    If    result = IDYES Then 
        crt.quit 
    End If

    '結束會話日誌 
    crt.session.Log(false) 
'    crt.screen.Synchronous = false 

End Sub

有時候需要每天定時拉取伺服器上的日誌檔案到跳板機,而又苦於沒有許可權操作crontab命令,怎麼辦呢???

一些windows遠端登入軟體(Putty,cygwin,secureCRT……)可以幫忙哦~

下面詳細介紹下利用secureCRT 設定自動化指令碼的方法:

1.首先設定你要在linux機器上執行的指令碼:

方法一:自己編寫

方法二:secureCRT錄製指令碼功能(簡單方便,不易出錯)

1) 開啟secureCRT,選擇開始錄製指令碼。


2)寫下你想要自動化執行的命令 。


3)停止指令碼,儲存。


ok,指令碼完成。

2.編寫bat檔案。

由於在linux上沒有設定定時任務的許可權,只能在windows上觸發指令碼執行。

例如你的指令碼儲存在 D:\crt 目錄下,那麼bat檔案可以是這樣:

D:

cd \crt

"C:\Program Files\VanDyke Software\Clients\SecureCRT.exe(secureCRT安裝目錄)" /S "10.232.***.***(你要遠端登入的機器)" /SCRIPT 指令碼名字.vbs

儲存。

3. 設定定時任務

控制面板->任務計劃->新增任務計劃



 

ok,大功告成!!