.NET控制台输出和PSEXEC(.NET console output and PSExe

2019-10-21 01:46发布

我用Process类运行PSEXEC微软工具执行与自己类似这样的输出远程命令:

            Process p = new Process();

            string args = @"\\remotemachine -u someuser -p somepass wmic product get name";

            ProcessStartInfo ps = new ProcessStartInfo();
            ps.Arguments = args;
            ps.FileName = psExecFileName;
            ps.UseShellExecute = false;
            ps.CreateNoWindow = true;
            ps.RedirectStandardOutput = true;
            ps.RedirectStandardError = true;

            p.StartInfo = ps;
            p.Start();

            StreamReader output = p.StandardOutput;

            string output = output.ReadToEnd();

其中WMIC产品获取命名与它自己的输出列出远程计算机上的所有安装的应用程序远程运行WMI工具。 所以,在输出我没有看到WMIC的输出,在当我在命令行中运行PSEXEC本地的同时,我可以完全看到两个PSEXEC的输出和远程启动WMIC。 问题是,我怎么能捕获所有的本地机器上的输出? 我应该在一个单独的控制台运行它,并尝试连接到控制台来捕获所有的输出?

更一般地,如果把说白了,为什么在这个过程中StandardOutput并在控制台上运行PSEXEC时,直接不一样的输出?

Answer 1:

ReadToEnd等待,直到进程退出。 如Console.ReadLine()在psExecFile可以阻止你的阅读。 但你可以得到的已写入流,

            StreamReader output = p.StandardOutput;
            string line;
            while ((line = output.ReadLine()) != null)
            {
                Console.WriteLine(line);
            }


Answer 2:

在控制台中,同时写入数据StandardOutputStandardError显示在控制台中。

在你的程序,你需要在每一个看个别...尝试在末尾添加这样的事情:

string error = p.StandardError.ReadToEnd();


文章来源: .NET console output and PSExec