Quiero abrir conexiones SSH desde C# abriendo un proceso y ejecutando plink. Todos los resultados se deben recopilar y, según los resultados, el programa disparará acciones al ssh. Mi gran problema es que estoy usando un par de scripts si diferentes y necesito una interacción del usuario (automatizada). Por lo tanto, tengo que capturar TODOS los datos de salida (salida estándar, error estándar Y CONSOLA).Capturar TODOS (stdout, stderr Y CON) salida de cmd ejecutando plink con C# (salida estándar + errar ok, CON no funciona)
Mirando el siguiente lote de prueba debe hacer el caso más claro:
1: @ECHO OFF
2: ECHO StdOut
3: ECHO StdErr 1>&2
4: ECHO Cons>CON
El código es como:
Process process;
Process process;
process = new Process();
process.StartInfo.FileName = @"cmd.exe";
process.StartInfo.Arguments = "/c test.bat";
process.StartInfo.UseShellExecute = false;
process.StartInfo.ErrorDialog = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardInput = true;
process.Start();
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
process.ErrorDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
process.BeginOutputReadLine();
process.BeginErrorReadLine();
StreamWriter inputWriter = process.StandardInput;
[...]
soy capaz de capturar las líneas 2 + 3, pero no 4 (utilizado por algunos programas). También probé Powershell (o directamente Plink) en lugar de cmd.exe como punto de partida, pero el mismo resultado.
¿Hay alguna forma en C# para capturar la consola también o sabe usted que alguna línea de comando de terceros puede redirigir CON a stdout o algo como esto?
¿Cuál es la diferencia entre la salida estándar y la consola? –
@DanielHilgarth No estoy del todo seguro para Windows, pero en UNIX la salida estándar iría a cualquier parte (incluso a un archivo), mientras que la otra siempre iría a la consola (modo de texto). Eso se muestra, por ejemplo, si ha iniciado sesión de forma remota. La salida de la consola siempre va a la consola/computadora física (creo que hay algunas opciones para cambiar esto también, pero en términos generales). –