简体   繁体   English

在C#中使用CMD.exe时的“多步”命令

[英]“Multi-Step” commands while using CMD.exe in C#

I'm trying to use "multi-step" command in ac# script, for example the command "net user usrname *" contains 3 steps to enter a password and then validate, i don't know if it is possible to send extra arguments while the Process is running 我正在尝试在ac#脚本中使用“多步”命令,例如命令“ net user usrname *”包含3个步骤,以输入密码然后进行验证,我不知道是否可以发送额外的密码进程运行时的参数

My code: 我的代码:

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();

You would concatenate each command with "&". 您可以将每个命令与“&”连接。 For example, "cmd /k echo Test 1 & echo test 2". 例如,“ cmd / k echo Test 1&echo test 2”。

Edit: 编辑:

I created a remote control/remote admin solution a while back that uses this same technique to allow you to run batch and PowerShell scripts against remote computers via the web portal. 我不久前创建了一个远程控制/远程管理解决方案,该解决方案使用相同的技术来允许您通过Web门户对远程计算机运行批处理和PowerShell脚本。 As shown in the below screenshot, it works. 如下面的屏幕截图所示,它可以正常工作。

在此处输入图片说明

The C# that executes the command can be found here: https://github.com/Jay-Rad/InstaTech_Client/blob/master/InstaTech_Service/Socket.cs#L614 可以在以下位置找到执行命令的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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM