我想批量远程登录交换机查询vlan信息,然后利用secureCRT中的session保存,但我写出crt.Session.log(1)就提示缺少对象,改成crt.Session.log(0)就没错,但不能记录结果,麻烦哪位达人帮忙看看;谢谢啊 源程序如下
# $language = "JScript"
# $interface = "1.0"//=================================================
// Name: 自动巡检脚本
// auth: 2楼水饺
// date: 2009-4-16
//  ver: 2.0
//=================================================
function main()
{
//----------------------------------
//  脚本初始化过程
//----------------------------------
var isdebug = 0; //debug开关
var islog = 1; //是否保存脚本运行的日志
var isrecord = 1 ; //是否将命令执行的结果保存下来
var waittimeout = 2; //执行一个命令以后等待下一个命令执行的时间间隔
var fname_record; //每个设备运行的命令记录文件,默认放在脚本所在目录
//var fname_model; //型号配置文件
var fname_devicelist = "devices.txt"; //设备信息文件,包括设备的地址,端口等等
var fname_cmdlist = "cmdlist.txt"; //命令列表文件,包括需要执行的命令
var fname_log = "log.txt"; //这个是脚本的debug文件,脚本出错放在这里,默认放在脚本所在目录
var fso, logfile; //脚本日志文件 var model; //设备型号相关参数
var devices = new Array(); //设备列表,从devices文件中读取
var device_param = new Array(); //每个设备的参数,从devices数组中读取
var model_param = new Array(); //设备型号配置参数,对应型号文件中内容
var cmd = new Array(); //需要在设备上执行的命令列表,从cmdList文件中读取 var more; //more字符串
var mflag; //标记是否还有---more---
var re; //正则表达式 var i_cmd,i_device; //循环变量 //创建并打开log文件
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CreateTextFile(fname_log);
logfile = fso.OpenTextFile(fname_log, 2, true);

//读取设备列表和命令列表
devices = readfile(fname_devicelist, logfile);
cmd = readfile(fname_cmdlist, logfile);
if (devices==false || cmd==false)
{
if (isdebug){ showmsg("File empty or not found.", 16); }
if (islog){ writelog(logfile, "Script terminated."); };
crt.quit();
}
if (isdebug){ showmsg("Script start.", 64); }
if (islog){ writelog(logfile, "Script start."); }
//----------------------------------
//  开始登陆设备并执行命令
//----------------------------------
for (i_device=0; i_device<devices.length; i_device++)
{
//读取各字段
re = /\s+/;  //匹配空白符号(tab,空格,回车等等)一次或者多次
device_param = devices[i_device].split(re); re = /^\s*$/; //遇到空行则跳过
if (re.test(device_param[0])) { continue; }
re = /^#/; //遇到#注释跳过
if (re.test(device_param[0])) { continue; } if ( !(device_param[0]==null) )
{
/*for (var i=0; i<cmd.length; i++)
{
showmsg(device_param[i]);
}*/
//打开屏幕同步
crt.screen.Synchronous = true; //读取型号配置文件
model = readfile("models\\" + device_param[6], logfile);
if (model==false)
{
if (isdebug){ showmsg("Model define error.", 16); }
if (islog){ writelog(logfile, device_param[0]+" model define error."); };
continue;
}
more = model[0];
//showmsg(model[0],48);

//命名log文件
fname_record = device_param[0] + "_" + device_param[5] + "_" + device_param[6] + ".txt"
try
{  
crt.Session.LogFileName = fname_record;
crt.Session.log(false);

}
catch (E)
{
if (isdebug){ showmsg(device_param[0] + " logging failed.", 48); }
if (islog){ writeLog(logfile, device_param[0] + " logging failed."); }
continue;
}

//连接到主机
if (!autoConnect(device_param[0], device_param[1], device_param[2], device_param[3], device_param[4]))
{
if (isdebug){ showmsg(device_param[0] + ":" + device_param[1] + " connect failed.", 48); }
if (islog){ writelog(logfile, device_param[0] + ":" + device_param[1] + " connect failed."); }
if (crt.Session.Connected)
{
crt.Session.Disconnect();
crt.screen.Synchronous = false;
crt.Session.Log(0);
}
continue;
} //执行cmdlist文件中定义的命令
for (i=0; i<5; i++)
{
crt.Screen.Send("\n");
crt.Screen.WaitForStrings("#", waittimeout);
}
for (i_cmd=0; i_cmd<cmd.length; i_cmd++)
{
crt.Screen.Send(cmd[i_cmd] + "\n");
while(true)
{
mFlag = crt.Screen.WaitForStrings(more, waittimeout);
if (mFlag)
{
crt.Screen.Send(" ");
}
else

writelog(logfile,crt.Screen.Get(crt.Screen.CurrentRow,2,crt.Screen.CurrentRow,2));
break;
}
}//end while
} //断开连接
crt.Session.Disconnect(); //关闭屏幕同步
crt.screen.Synchronous = false; //关闭log
crt.Session.Log(0);
}//单个设备执行结束
}//主循环结束
//----------------------------------
//  脚本正常完成
//----------------------------------
if (isdebug){ showmsg("Script finished.", "Script", 64 | 0); }
if (islog){ writelog(logfile, "Script finished."); }
crt.quit();
}//=================================================
// Name: readfile()打开文件,返回文件内容为数组
// date: 2009-4-19
//  ver: 1.0
//=================================================
function readfile(filename,ts_log)
{
var tmpTime = new Date();
var fso,datafile;
var data_list; fso = new ActiveXObject("Scripting.FileSystemObject");
try
{
datafile = fso.OpenTextFile(filename, 1, true);
data_list = datafile.ReadAll().split("\r\n");
}
catch (E)
{
ts_log.WriteLine(tmpTime.toString() + "\t'" + filename + "' is empty or not found.");
return false;
}
return data_list;
}
//=================================================
// Name: writelog()将脚本debug信息写入文件
// date: 2008-2-28
//  ver: 1.0
//=================================================
function writelog(ts, str)
{
var tmpTime = new Date();
ts.WriteLine(tmpTime.toString() + "\t" + str);
}
//=================================================
// Name: showmsg()弹出对话框,为了少写点字
// date: 2009-4-18
//  ver: 1.0
//=================================================
function showmsg(msg,type)
{
switch (type) 
{
case 16 : 
{
crt.Dialog.MessageBox(msg, "Error", type | 0);
return true;
}
case 32 : 
{
crt.Dialog.MessageBox(msg, "Question", type | 0);
return true;
}
case 48 : 
{
crt.Dialog.MessageBox(msg, "Warning", type | 0);
return true;
}
case 64 : 
{
crt.Dialog.MessageBox(msg, "Information", type | 0);
return true;
}
default :
{
crt.Dialog.MessageBox(msg, "Tips", 64 | 0);
return true;
}

}
//-------------------------------------------------
// name: autoConnect,telnet登陆设备
// date: 2009-3-3
//  ver: 1.0
//-------------------------------------------------
function autoConnect(ip, port, login, pass, enpass)
{
//连接设备
try
{
crt.session.Connect("/TELNET " + ip + " " + port);
}
catch (E)
{
return false;
} if(!crt.Screen.WaitForStrings("login:", 5))
{
crt.Screen.Send("\n");
if (!crt.Screen.WaitForStrings("username:", 5))
{
return false;
}
} // 输入用户名
crt.Screen.Send(login + "\n");
if(!crt.Screen.WaitForStrings("password:", 5)){
return false;
}

// 输入密码
crt.Screen.Send(pass + "\n");
if(!crt.Screen.WaitForStrings(">", 5)){
return false;
}

// 进入enable模式
crt.Screen.Send("enable\n");
if(!crt.Screen.WaitForStrings("password:", 5)){
return false;
}
 
// 输入enable密码
crt.Screen.Send(enpass + "\n");
if(!crt.Screen.WaitForStrings("#", 5)){
return false;
}

return true;
}