在VBScript中替换sendkeys

时间:2014-06-12 21:05:30

标签: database postgresql batch-file vbscript cmd

我遇到了一个VBScript的问题,它自动输入Runas命令的密码。我使用以下VBScript(runasDBUser.vbs)来执行程序:

Option explicit
Dim oShell, k
Const PASSWORD = "DBPassword1~"
set oShell= Wscript.CreateObject("WScript.Shell")
WScript.Sleep 500
oShell.run("RunAs /noprofile /user:DBUser " & Chr(34) & "cmd /c\" & Chr(34) &       WScript.Arguments(0) & "\" & Chr(34) & Chr(34))
WScript.Sleep 700
oShell.SendKeys (PASSWORD)
Wscript.Quit

在批处理文件中调用此脚本:

cscript //Nologo //B runasDBUser.vbs ""C:postgresql\bin\initdb.exe" --locale=C --encoding=UTF-8  -U %ADMIN_DB% -D "%DATA_DIR%""`

这在某些Windows服务器中成功运行,但在某些情况下,它不起作用。好像它不能正确输入密码,因此,initdb.exe将无法运行。当我在安装过程中手动输入密码时,它可以正常工作。是否有一个替换发送密钥,我可以用来在运行" Runas"时自动输入DBUser的密码。命令?

或者,是否有其他人可以建议哪些脚本会自动输入Runas密码?不能使用像psexec这样的第三方exe文件。

2 个答案:

答案 0 :(得分:0)

首先,我认为最好使用vbscript来发送密码。例如,如果用户将焦点转移到另一个窗口,则密码将被发送到该窗口。可能它在某些服务器上不起作用的原因是因为在脚本运行时另一个窗口可能已成为活动窗口。

如果确实需要自动化,最好使用AUTOIT。但是,话虽如此,另一种方法是在快捷方式文件中输入此命令。

runas / profile / env / savecred / user:username pathtofile。因此,您只需手动输入一次密码,然后它将始终作为指示的用户名执行。

答案 1 :(得分:0)

Option explicit
Dim oShell
Const password = "AdministratorPassword"
Const DBUser="localhost\administrator"
set oShell= Wscript.CreateObject("WScript.Shell")
WScript.Sleep 500
oShell.run "cmd.exe /c  runas /noprofile /user:"&DBUser&" " & WScript.Arguments(0) &""
WScript.Sleep 2000
oShell.SendKeys (password)
WScript.Sleep 300
oShell.SendKeys"~"
Wscript.Quit

从命令行运行脚本以以管理员身份运行notepad.exe

cscript.exe //nologo //b runasDBUser.vbs notepad.exe