【问题标题】:Run cmd from vbscript silently从 vbscript 静默运行 cmd
【发布时间】:2014-05-23 16:24:55
【问题描述】:

我创建了以下 runas.vbs 脚本:

**************
Option explicit

Dim oShell, k

Const PASSWORD = "Pass123~"

set oShell= Wscript.CreateObject("WScript.Shell")

WScript.Sleep 500

oShell.run("RunAs /noprofile /user:%computername%\postgres " & Chr(34) & "cmd /c\" & 

Chr(34) & WScript.Arguments(0) & "\" & Chr(34) & Chr(34))

WScript.Sleep 1000

For k=1 To Len(PASSWORD)

  WScript.Sleep 200

  oShell.SendKeys Mid(PASSWORD,k,1)

Next

Wscript.Quit

**************

我在批处理文件中使用这个 vbscript 来运行 initdb.exe (Postgresql)。 用作:

cscript //Nologo //B runasNSPostgres.vbs ""%LG_PATH%\initdb.exe" --locale=C --encoding=UTF-8  -U %DBADMIN% -D "%DBDATA%""

执行此命令时,将打开另一个命令提示符屏幕,该屏幕将启动 initdb 处理。我不希望出现新的 cmd 提示屏幕。我希望 initdb.exe 在后台运行。

【问题讨论】:

    标签: windows batch-file vbscript cmd


    【解决方案1】:

    如果您隐藏命令提示符窗口,您将无法使用SendKeys 向其发送您的密码击键。

    不过,您可以使用其他方法。尝试使用ECHO 命令并将其输出通过管道传输到RunAs

    oShell.Run "echo " & PASSWORD & " | runas /noprofile ...", 0
    

    使用0 作为第二个参数来防止窗口出现。

    【讨论】:

    • 当我使用这个命令时,什么也没有发生......---- oShell.Run "echo " & PASSWORD & " | runas /noprofile ...", 0 ---- -
    • ... 只是其余命令的占位符。确保包含整个命令行。
    • 是的..这是我使用的,但什么也没发生——oShell.run "echo " & PASSWORD & " | RunAs /noprofile /user:%computername%\postgres " & Chr(34) & "cmd /c\" & Chr(34) & WScript.Arguments(0) & "\" & Chr(34) & Chr(34),0 -- 管道应该在 qoutes 内部还是外部?跨度>
    • 这可能是一个死胡同。我用CMD /ACMD /U 尝试过,但它看起来不像runas 正确接受标准输入作为密码字符串,这很有趣,因为它确实完成了密码提示。
    • 那么有没有其他方法可以完成相同的任务?
    猜你喜欢
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    相关资源
    最近更新 更多