【发布时间】:2014-06-12 21:05:30
【问题描述】:
我遇到了一个 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 服务器上可以成功运行,但在某些 Windows 服务器上却不起作用。似乎它不会正确输入密码,因此 initdb.exe 将无法运行。当我在安装过程中手动输入密码时,它工作正常。在运行“Runas”命令时,我可以使用 sendkeys 的替代方法来自动输入 DBUser 的密码吗?
或者,有没有其他人可以建议的可以自动输入 Runas 密码的脚本?不能使用 psexec 等第三方 exe 文件。
【问题讨论】:
-
为了更安全的方法,runas 可以缓存密码...但是您需要至少输入一次,并且密码存储在当前用户的配置文件中(即:可能不适合)。
-
DBuser 配置文件是在安装 DB 时创建的,否则不会使用。此外,为了在没有用户交互的情况下从批处理文件安装数据库,我需要自动化密码输入过程..
-
当我将你的运行行(使用 cat.txt 作为文件名)消息框出来时,这就是我得到的。
RunAs /noprofile /user:DBUser "cmd /c\"cat.txt\""。不返回值的东西也没有括号。反斜杠不是基本(没有)或批处理(^)中的转义。 -
@phd443322
\"被正确地用于包围传递给RunAs的命令的参数。查看RunAs帮助文档。 -
@user3669651 你说你不能使用第三方文件。那么这是否意味着其他 Windows 应用程序也是可能的?如果是这样,您可以使用
SCHTASKS安排一次性任务,并在命令行中提供密码。不需要SendKeys。
标签: database postgresql batch-file vbscript cmd