我正在尝试创建一个在集中式设备上运行的小程序。该程序将运行
"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";
}