echo cmd |命令无法正常工作

时间:2017-04-04 11:18:30

标签: cmd command runas

我正在尝试以用户“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秒钟才能告诉我这是错误的(给出相同的错误信息)。

1 个答案:

答案 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
    }
}