2017-12-16 5 views
0

예를 들어 "net user usrname *"명령에 aC# 스크립트에서 "multi-step"명령을 사용하려고하는데 암호를 입력하는 3 단계가 있습니다C#에서 CMD.exe를 사용하는 동안 "Multi-Step"명령 사용

Process p = new Process(); 
p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
p.StartInfo.CreateNoWindow = true; 
p.StartInfo.FileName = "cmd.exe"; 
p.StartInfo.Arguments = "/C " + command; 
p.StartInfo.WorkingDirectory = startupFolder; 
p.StartInfo.RedirectStandardOutput = true; 
p.StartInfo.RedirectStandardError = true; 
p.StartInfo.UseShellExecute = false; 
p.Start(); 
string output = p.StandardOutput.ReadToEnd(); 
string error = p.StandardError.ReadToEnd(); 
+1

은 표준 입력 리디렉션하고 문자열 피드. –

+0

RedirectStandardInput = true이고 p.StandardInput 스트림에 문자열을 씁니다. – Arthur

+0

이 기술을 사용해 보겠습니다. –

답변

1

당신은 "&"각 명령을 연결합니다 : 프로세스가

을 실행하는 동안 다음 내 코드가 추가 인수를 보낼 수 있다면 난 몰라 확인합니다. 예를 들어 "cmd/k echo test 1 & echo test 2"와 같이 입력하십시오.

편집 :이 같은 기술을 사용하여 다시는 당신이 웹 포털을 통해 원격 컴퓨터에 대한 배치 및 PowerShell에서 스크립트를 실행할 수 있도록하면서

나는 원격 제어/원격 관리 솔루션 a를 만들었습니다. 아래 스크린 샷과 같이 작동합니다.

enter image description here

명령을 실행하는 C#을 여기에서 찾을 수있다 : https://github.com/Jay-Rad/InstaTech_Client/blob/master/InstaTech_Service/Socket.cs#L614

if (cmdProcess == null || cmdProcess.HasExited) 
{ 
    var psi2 = new ProcessStartInfo("cmd.exe", "/k " + command); 
    psi2.RedirectStandardOutput = true; 
    psi2.RedirectStandardInput = true; 
    psi2.RedirectStandardError = true; 
    psi2.UseShellExecute = false; 
    psi2.WorkingDirectory = Path.GetPathRoot(Environment.SystemDirectory); 

    cmdProcess = new Process(); 
    cmdProcess.StartInfo = psi2; 
    cmdProcess.EnableRaisingEvents = true; 
    cmdProcess.OutputDataReceived += async (object sender, DataReceivedEventArgs args) => 
    { 
     jsonMessage.Status = "ok"; 
     jsonMessage.Output = args.Data; 
     await SocketSend(jsonMessage); 

    }; 
    cmdProcess.ErrorDataReceived += async (object sender, DataReceivedEventArgs args) => 
    { 
     jsonMessage.Status = "ok"; 
     jsonMessage.Output = args.Data; 
     await SocketSend(jsonMessage); 
    }; 
    cmdProcess.Start(); 
    cmdProcess.BeginOutputReadLine(); 
    cmdProcess.BeginErrorReadLine(); 
} 
else 
{ 
    cmdProcess.StandardInput.WriteLine(command); 
} 
+0

답변을 주셔서 감사합니다. 시도했지만 작동하지 않아서 무엇을 해야할지 잘 모릅니다. –

+0

"작동하지 않음"에 대해 자세히 설명해 주시겠습니까? 특이성이 중요합니다. :) – Jared