很难弄清楚这一点。我有一个询问用户名和密码的 vbscript。然后脚本运行 PSExec.exe 将这些传递到命令行,如下所示。
strUser = Inputbox("Username:","Username")
strPassword = Inputbox("Password:","Password")
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "%comspec% /K psexec.exe \\workstation -u " & struser _
& " -p " & strPassword & " -d calc.exe", 1, false
如果密码中没有插入符号,这可以正常工作。但是,如果它确实有一个,例如如果密码是“Pass)(*&^%$#@!”,我会从 psexec 收到以下错误。
'%$#@!' is not recognized as an internal or external command,
operable program or batch file.
插入符号被命令行读取为空格,因此它认为它正在尝试运行此命令。
psexec.exe \\workstation64 -u User -p Pass)(*& %$#@! -d Calc.exe
如您所见,有一个空格而不是插入符号,因此 psexec 看到 %$#@! 作为命令。
我已经看到一个使用批处理文件时传递它的示例,但在这种情况下它不起作用。它说像这样添加一个额外的 ^ ^^ 可以在 bat 文件中使用。
如何将插入符号传递给命令行????
更新......
我今天在工作中为此工作了大约 45 分钟,但无法正常工作。我尝试的第一件事是在密码中添加引号,但它仍然不起作用。我刚刚在家里测试了它,它运行良好....... 工作的操作系统是 Windows XP,我在家里运行的是 Windows 7。我会在早上再试一次,以确保我没有打错任何东西。这是我为使其在 Windows 7 上在家中工作所做的工作。
strUser = Inputbox("Username:","Username")
strPassword = Inputbox("Password:","Password")
strPassword = chr(34) & strPassword & chr(34)
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "%comspec% /K psexec.exe \\workstation -u " & struser _
& " -p " & strPassword & " -d calc.exe", 1, false