功能:想通过vbs脚本实现 telnet到远程计算机,然后执行数据库命令,赋予其它电脑远程访问的权
---------VBS实现---------------
说明:
1、只能手动运行vbs实现;
2、通过web调用vbs,或远程到这个vbs脚本的主机时执行vbs,大部分是执行失败的。
----QTP/UFT、EXCEL可以远程调用,是因为他们开启了DCOM的功能;
Set args = Wscript.Arguments
IP = args(0)user = args(1)
pwd = args(2)
set sh=WScript.CreateObject("WScript.Shell")
sh.run """telnet & IP""" ,1 '启动TELNET并连接到服务器
WScript.Sleep 1000
sh.SendKeys "n~"
WScript.Sleep 1000
sh.SendKeys "" & user & "~" '输入用户+回车
WScript.Sleep 1000
sh.SendKeys "" & pwd & "~" '输入用户密码+回车
WScript.Sleep 1000
'sh.SendKeys "ipconfig~" '登陆后输入你要执行的命令
WScript.Sleep 1000
sh.SendKeys "copy /y ""\\192.168.5.5\MyAutoTest\Web\Launch\EnterMysql.bat"" .\ ~"
WScript.Sleep 1000
sh.SendKeys "EnterMysql.bat~"
WScript.Sleep 1000
sh.SendKeys ";~"
sh.SendKeys "GRANT ALL ON *.* TO root@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;~"
WScript.Sleep 2000
sh.SendKeys ";~"
===========================================
---------通过qtp---------------
说明:
1、通过QTP/UFT的DCOM,我们可以调QTP,然后QTP可以调用CMD,这样就实现了界面可见,理论也就实现了。
----实际上在64位系统上是行不通的,无论我们通过QTP调cmd,还是通过vbs,或是bat调cmd,这样启动的cmd窗口均不认识telent命令;
---只要是QTP启动的CMD窗口,均为64位的cmd,而我们想要的32位的cmd。即使我调32位的cmd的全路径,也是不行的。
2、手动启动cmd是可以telnet的,而QTP启动的却不能,也可能是启动时的身份、或变量不同,不知道如何解决。上述方法不可行;
3、我们可以通过qtp启动我的电脑,或是文件夹,然后我们在 系统路径中输入 cmd,此时启动的窗口则可以认识telent。参考下图:
4、既然方法可行,然后就是在QTP/UFT中实现代码了:
TestPath=left(environment.Value("TestDir"),Instr(1, environment.Value("TestDir"), "测试脚本", 0)-1)
Environment.LoadFromFile TestPath & "\测试数据\GrantDB.ini"
IP = Environment("IP")
user = Environment("user")
pwd = Environment("pwd")
SystemUtil.Run "explorer.exe","","",open
set objshell=createobject("wscript.shell")
wait 2
objshell.SendKeys("{F4}")
objshell.SendKeys("{BS}{BS}{BS}")
objshell.SendKeys("cmd")
objshell.SendKeys("{ENTER}")
wait 1
Window( "object class:=ConsoleWindowClass" ).Activate
Window( "object class:=ConsoleWindowClass" ).Type "telnet " & IP
Window( "object class:=ConsoleWindowClass" ).Type micreturn
wait 1
Window( "object class:=ConsoleWindowClass" ).Activate
Window( "object class:=ConsoleWindowClass" ).Type "n"
Window( "object class:=ConsoleWindowClass" ).Type micreturn
wait 1
Window( "object class:=ConsoleWindowClass" ).Activate
Window( "object class:=ConsoleWindowClass" ).Type user
Window( "object class:=ConsoleWindowClass" ).Type micreturn
wait 1
Window( "object class:=ConsoleWindowClass" ).Activate
Window( "object class:=ConsoleWindowClass" ).Type pwd
Window( "object class:=ConsoleWindowClass" ).Type micreturn
wait 2
Window( "object class:=ConsoleWindowClass" ).Activate
Window( "object class:=ConsoleWindowClass" ).Type "copy /y ""\\192.168.5.5\MyAutoTest\Web\Launch\EnterMysql.bat"" .\"
Window( "object class:=ConsoleWindowClass" ).Type micreturn
wait 2
Window( "object class:=ConsoleWindowClass" ).Activate
Window( "object class:=ConsoleWindowClass" ).Type "EnterMysql.bat"
Window( "object class:=ConsoleWindowClass" ).Type micreturn
wait 1
Window( "object class:=ConsoleWindowClass" ).Activate
Window( "object class:=ConsoleWindowClass" ).Type "GRANT ALL ON *.* TO root@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;"
Window( "object class:=ConsoleWindowClass" ).Type micreturn
================================================================================
文件:EnterMysql.bat 如下:
说明:
1、通过bat读取注册表里的值,这样就知道我们的数据库安装哪里了。
@echo on
for /f "tokens=2 delims=Z" %%i in ('REG.EXE QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MySQL8" /v FilePath') do set InstallPath=%%i
set Path="%InstallPath%"
FOR /F "tokens=1 delims=:" %%i IN (%Path%) do set dev=%%i
%dev%:
cd %InstallPath%\mysql\bin
mysql -uroot -proot
;
;
GRANT ALL ON *.* TO root@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
--------------------------------------------------------------