2017-04-04 12 views
0

"blain"というユーザーとしてnotepad.exeを実行しようとしています。したがって、コマンドプロンプトでコマンドrunas /u:blain notepad.exeを使用して、期待どおりに動作し、ユーザーのパスワードの入力を要求します。私はそれを自動化したいので、blainのパスワードが "pass"であれば、私はecho pass| runas /u:blain notepad.exeとタイプします。echo cmd |コマンドが正常に動作しない

どんなに私は、コマンドは常に返して渡す置き換える何:

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. 

注意する興味深いのは、メッセージが入る瞬時に押した後に表示されていることです。手動でパスワードを間違って入力すると、間違っていると伝えるのに2秒かかります(同じエラーメッセージが表示されます)。

答えて

1

runasにパイプすることはできませんが、これを許可しないように設計されています。

https://blogs.msdn.microsoft.com/oldnewthing/20041129-00/?p=37183

それはオプションだ場合は、しかしVBScriptやPowerShellで似た何かを試みることができますか?

A 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 
    } 
} 
+0

バマー...パスワードをパイプすることができるという私のユースケースのヒンジ。それは安全ではない方法ですが、空のテキストファイルを作成するのは、ユーザーが正しいパスワードを入力した場合です。 – Blaine

+0

@Blaine VBソリューションを試してみてください。 –

+0

申し訳ございません。あなたが私にバックストーリー/リクエスタ全体を渡すことを望むなら、チャットにあなたを招待しました。(少し長すぎてここに投稿できません) – Blaine

関連する問題