我正在尝试以用户“blain”运行notepad.exe。因此,我想在命令提示符中使用命令runas /u:blain notepad.exe
,该命令提示符按预期工作并提示输入用户密码。我想自动化它,所以,假设blain的密码是“pass”,我输入echo pass| runas /u:blain notepad.exe
。
无论我替换传递的是什么,命令总是返回:
C:\Users\blain>echo pass| runas /u:blain notepad.exe
Enter the password for blain:
Attempting to start notepad.exe as user "BLAINE-WIN-10\blain" ...
RUNAS ERROR: Unable to run - notepad.exe
1326: The user name or password is incorrect.
有趣的是,按Enter键后会立即显示该消息。如果我手动输入密码错误,则需要约2秒钟才能告诉我这是错误的(给出相同的错误信息)。
答案 0 :(得分:1)
您无法管道runas
,但它的设计不允许这样做。
https://blogs.msdn.microsoft.com/oldnewthing/20041129-00/?p=37183
你可以尝试在VBScript或Powershell中做类似的事情,如果这是一个选项吗?
VBScript选项是将密钥发送到控制台提示符,密码必须以纯文本格式保存:
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd /c runas /user:domain\user program.exe"
WScript.Sleep 500
WshShell.SendKeys "password"
WshShell.SendKeys "{ENTER}"
一个Powershell版本,它会一直提示用户,直到他们正确为止(保存为.ps1,右键单击该文件并单击使用powershell运行):
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
$ds=New-Object System.DirectoryServices.AccountManagement.PrincipalContext([System.DirectoryServices.AccountManagement.ContextType]::Machine)
for(;;)
{
$cred=Get-Credential
if($ds.ValidateCredentials("$($env:computername)$($cred.UserName)",$cred.GetNetworkCredential().Password))
{
#Success, start your program
start program.exe -Credential $cred
exit
}
}