【问题标题】:Alternate to sendkeys in VBScript在 VBScript 中替代 sendkeys
【发布时间】: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


【解决方案1】:

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

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

runas /profile /env /saved /user:username pathtofile。因此,您手动输入一次密码,之后它将始终以指定的用户名执行。

【讨论】:

  • AUTOIT 是一个第三方应用程序,我无法使用它,并且 savecred 只能工作到 XP(我猜).. 它在 Windows 7/8、WIN 2008/2012 上不起作用.. 你能建议一些其他选项来自动输入 RunAs 密码
  • 已保存已验证可在 Windows 7 上运行。请您仔细检查您的命令并确认。
  • 是的,你是对的。它可以工作但是在我的情况下,数据库用户是动态创建的,并且用户从不登录系统。第一次使用该用户是在运行 initdb.exe 时 .. 所以凭据永远不会保存...我尝试使用带有 RunAs 的 savecred 选项,但它仍然要求我输入密码
  • 对不起,我对你想要完成的事情有点迷茫。如果我错了,请纠正我:您想创建一个脚本以在有人未登录系统时以管理员身份自动运行 initdb.exe,我正确吗?
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多