สำหรับใครที่ใช้งาน Secure CRT อยู่เป็นประจำและมีงานที่ต้องดึงข้อมูลโดยใช้ command line อยู่เป็นประจำหรือต้องดึงข้อมูลปริมาณมาก การใช้งาน Script เพื่อช่วยงานจะเป็นเครื่องมือที่ช่วยทุ่นแรงเราอย่างมาก การใช้งานก็ไม่ได้ยากเท่าใดนัก ซึ่งในบทความนี้ผมจะยกตัวอย่างที่ผมคิดว่าใช้งานบ่อยๆ ครับ
- crt.Session.Send(String) คือ ส่ง String
- crt.Screen.WaitForString(String) คือ รอการแสดงผลจนถึง String ที่กำหนด
- crt.Screen.ReadString(String) คล้ายกับ WaitForString แต่จะเป็นการอ่านจนถึง String ที่กำหนดแล้ว Return data ออกมา
- crt.Dialog.MessageBox(String) แสดงหน้าต่าง Dialog พร้อมข้อความ
- vbcr คือ กด Enter ของภาษา vbs. ส่วน python ใช้ "\n"
Chapter_1.vbs
crt.Screen.Send("display ip interface brief" & vbcr) crt.Screen.WaitForString("<HUAWEI>") crt.Screen.Send("display ip routing-table" & vbcr) data = crt.Screen.ReadString("<HUAWEI> ") crt.Dialog.MessageBox(data)
Chapter_1.py
crt.Screen.Send("display ip interface brief\n") crt.Screen.WaitForString("<HUAWEI>") crt.Screen.Send("display ip routing-table\n") data = crt.Screen.ReadString("<HUAWEI> ") crt.Dialog.MessageBox(data)
Chapter_1 ตัวอย่างผลลัพธ์
บทที่ 2 การดู Help เพื่อดูรายละเอียดการใช้งานและคำอธิบายของฟังก์ชั่น มีตัวอย่างทั้ง VBScript และ Python
คลิกที่ Menu Help -> Help Topics -> ในหน้าต่าง Help เลือก Contents -> Scripting -> Script Objects Reference
ส่วนมากจะใช้งานในส่วนของ Screen Object กับ Session Object
ตัวอย่าง Help ของ Readstring
บทที่ 3 การเก็บ log
Chapter_3.vbs
Set FSO = CreateObject("Scripting.FileSystemObject") ' create FileSystemObject scriptPath = FSO.GetAbsolutePathName(".") ' get script path = D:\Desktop\script crt.session.log(False) ' release log session logpath = FSO.BuildPath(scriptPath, "log_huawei.txt" ) ' log path = D:\Desktop\script\log_huawei.txt crt.Session.LogFileName = logpath ' set log filename crt.Session.Log(True, False) ' start log session and overwrite log file crt.Screen.Send("display ip interface brief" & vbCr) ' send command and [Enter] crt.Sleep 1000 ' delay 1 second crt.session.log(False) ' release log session crt.Dialog.MessageBox(logpath) ' message logpath after finish
Chapter_3.py
import os import time scriptPath = os.path.dirname(os.path.realpath(__file__)) # get script path = D:\Desktop\script crt.Session.Log(False) # release log session logpath = os.path.join(scriptPath, "log_huawei.txt") # log path = D:\Desktop\script\log_huawei.txt crt.Session.LogFileName = logpath # set log filename crt.Session.Log(True, True) # start log session and append log file time.sleep(1) # delay 1 second crt.Session.Log(False) # release log session crt.Dialog.MessageBox(logpath) # message logpath after finish
บทที่ 4 การใช้ Loop
ส่วนที่ 1 จะเก็บคำสั่งต่างๆ ไว้ในตัวแปรประเภท array และ list ตามลำดับ จากนั้นใช้ For loop เพื่อส่งสั่งไปยัง Router
Chapter 4.1_loop_command.vbs
lines = Array("show isis adjacency process-id 11",_ "show isis adjacency process-id 15",_ "show isis adjacency process-id 19" ) For each aline in lines crt.Screen.Send(aline & vbCr) crt.Screen.WaitForString("#") crt.Sleep 1000 Next
Chapter 4.1_loop_command.py
lines = ["show isis adjacency process-id 11", "show isis adjacency process-id 15", "show isis adjacency process-id 19" ] for aline in lines: crt.Screen.Send(aline + "\n") crt.Screen.WaitForString("#") time.sleep(1)
ส่วนที่ 2 จะส่งคำสั่ง "display ip interface brief" เก็บ output ไว้ในตัวแปล info จากนั้นแสดงหน้า output ในหน้าต่าง Diaglog เพื่อตรวจสอบ output. ใช้ฟังก์ชั่น split เพื่อแยก output ในแต่ละบรรทัดให้อยู่ในตัวแปลประเภท Array และ List ตามลำดับ ใช้ For loop เพื่อแสดงผลลัพท์
Chapter 4.2_loop_split.vbs
crt.Screen.Send("display ip interface brief"& vbcr) ' send command info = crt.Screen.ReadString(">") ' read string until found > crt.Dialog.MessageBox(info) ' show all lines = Split(info, vbCrLf) ' split by new line For each aline in lines ' loop crt.Dialog.MessageBox(aline) ' show each line in dialog Next
Chapter 4.2_loop_split.py
crt.Screen.Send("display ip interface brief\n") # send command info = crt.Screen.ReadString(">") # read string until found > crt.Dialog.MessageBox(info) # show all lines = info.split("\n") # split by new line for aline in lines: # loop crt.Dialog.MessageBox(aline) # show each line in dialog
บทที่ 5 Telnet
บทที่ 6 SSH
Chapter 6_ssh.py
hostip = "192.168.44.102" username = "admin" password = "admin" crt.Session.ConnectInTab('/SSH2 /ACCEPTHOSTKEYS /PASSWORD %s %s@%s '%(password, username, hostip), True)
บทที่ 7 VBScript เขียนและอ่านข้อมูลลง Excel
บทที่ 8 Python อ่านและเขียนลงใน csv
บทที่ 9 Python การใช้ Subprocess เพื่อเขียนข้อมูลลง Excel
No comments:
Post a Comment