Я пытаюсь создать небольшую программу для запуска на централизованном устройстве.Эта программа будет запускать
"psexec \ server (s) netstat -na | findstr" LISTENING ""
для сбора данных netstat с удаленных узлов (следует перенаправить вывод встрока), затем проанализируйте данные и сравните с известным списком.Я могу запустить psexec
cmd выше без каких-либо проблем из строки cmd, но когда я пытаюсь выполнить ту же команду, что и процесс в моей C # -программе, никакие данные не возвращаются для анализа.Я вижу, что netstat
выполняется (окно cmd мигает с результатами netstat), но process.standardoutput не перехватывает поток.Если в качестве аргумента я использую ping или что-то еще, кроме psexec
, поток перехватывается, и результаты отображаются в моем текстовом поле.Я также попытался установить имя файла psexec.exe и указать аргументы, но я получаю те же результаты.И последнее, но не менее важное: если я запускаю psexec без каких-либо аргументов, я получаю информацию отката справки, возвращенную в моем текстовом поле.Это верно, если я запускаю psexec.exe
в качестве имени файла ИЛИ если я запускаю cmd.exe
в качестве имени файла с "/ c psexec", заданным как args
.
Я просто пытаюсь получить вывод psexecбыть пойманным при выполнении локально в этой точке.Я буду беспокоиться о psexec для удаленных машин позже.Любая помощь будет очень признательна.
Вот код:
System.Diagnostics.Process pProcess = new System.Diagnostics.Process();
pProcess.StartInfo.FileName = "cmd.exe";
pProcess.StartInfo.Arguments = "/c psexec netstat";
pProcess.StartInfo.UseShellExecute = false;
pProcess.StartInfo.RedirectStandardOutput = true;
pProcess.Start();
string strOutput = pProcess.StandardOutput.ReadToEnd();
pProcess.WaitForExit();
if (pProcess.HasExited)
{
textBox1.Text = strOutput;
}
else
{
textBox1.Text = "TIMEOUT FAIL";
}