我试图在Windows命令提示符下运行一个简单的Windows批处理命令,而不必指定密码。用户名为' alex',所以我正在尝试:
>cmd /C echo PASSWD | runas /profile /user:alex "cmd /c dir"
但是我收到以下错误:
Enter the password for alex:
Attempting to start cmd /c dir as user "ALEX-NEU\alex" ..
RUNAS ERROR: Unable to run - cmd /c dir
1326: Logon failure: unknown user name or bad password.
其中ALEX_NEU
是机器名称。用户名和提供的密码是正确的 - 那么为什么我会收到此错误?如何正确地做到这一点?
答案 0 :(得分:1)
在运行时向runas
提供密码的唯一方法是使用脚本,也不是非常优雅。它很丑陋,它是黑客,它要求安全问题。话虽如此,我过去使用WScript.Shell
.run
和.SendKeys
这样的方法做了类似的事情:
@if (@a==@b) @end /* multiline JScript comment
:: runas.bat
:: runas with automated password entry
@echo off
setlocal enabledelayedexpansion
set "USER=username"
set "PASS=password"
set "CMD=cmd /c dir && pause"
:: delayed expansion prevents special characters from being evaluated
cscript /nologo /e:JScript "%~f0" !USER! !PASS! !CMD!
goto :EOF
:: end batch portion / begin JScript portion */
for (var i=0, args=[]; i<WSH.Arguments.length; i++)
args.push(WSH.Arguments(i).replace(/"/g, '^"')); // escape all quotes
var user = args[0],
pass = args[1],
cmd = ' "' + args.slice(2).join(' ') + '"',
oShell = new ActiveXObject("Wscript.Shell");
oShell.run('runas /noprofile /netonly /user:' + user + cmd);
WSH.Sleep(500);
oShell.SendKeys(pass + '{ENTER}');
这是一个黑客,只是一个概念证明,并且很大程度上未经测试。我不知道它是否会处理&#34;引用的参数&#34;在!CMD!
变量中。我敢说如果你想将它用于实际应用,你将来会进行大量的修改和调试。
您可能会考虑其他几个embellishments to this method。