【问题标题】:echo cmd| command not working properly回显命令|命令无法正常工作
【发布时间】:2017-04-04 11:18:30
【问题描述】:

我正在尝试以用户“blain”的身份运行 notepad.exe。因此,我想在命令提示符下使用命令runas /u:blain notepad.exe,它按预期工作并提示输入用户密码。我想自动化它,所以,假设 blain 的密码是“pass”,我输入echo pass| runas /u:blain notepad.exe

无论我用什么替换 pass,命令总是返回:

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 秒才能告诉我密码错误(给出相同的错误消息)。

【问题讨论】:

    标签: cmd command runas


    【解决方案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
        }
    }
    

    【讨论】:

    • 无赖...我的用例类型取决于能否通过管道输入密码。这是一种不安全的方法,但是如果用户输入了正确的密码,我想做的是创建一个空文本文件
    • @Blaine 我看看能不能想出一个 VB 解决方案,给我几分钟...
    • 好的。如果你想让我给你整个背景故事/要求,我邀请你聊天(在这里发布有点太长了)
    • @Blaine 很好,我已经添加了另一个版本,应该会更好
    猜你喜欢
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多