.NET консольный вывод и PSExec

1

Я запускаю инструмент PSExec Microsoft с классом Process, выполняющим удаленную команду с собственным выходом следующим образом:

            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 product get name - это инструмент WMI, работающий удаленно с собственным выходом, перечисляющим все установленные приложения на удаленном компьютере. Таким образом, на выходе я не вижу выход wmic, в то время как я запускаю PSExec в командной строке локально, я могу полностью видеть вывод обоих PSExec и запускать удаленно WMIC. Вопрос в том, как я могу захватить весь вывод на локальном компьютере? Должен ли я запускать его в отдельной консоли и пытаться подключиться к консоли, чтобы захватить весь вывод?

В более общем плане, если ясно, почему вывод в процессе StandardOutput и в консоли при запуске PSExec напрямую не то же самое?

  • 2
    Если вы не знаете, wmic может подключиться к удаленным компьютерам самостоятельно (/ узел)
  • 0
    Да, но в моем случае я не полагаюсь на удаленный WMI, поскольку он имеет ограничения.
Показать ещё 3 комментария
Теги:
command-line
psexec

2 ответа

0

В консоли на консоли отображаются данные, записанные как в StandardOutput и в StandardError.

В рамках вашей программы вам нужно посмотреть каждый отдельно... попробуйте добавить что-то вроде этого в конце:

string error = p.StandardError.ReadToEnd();
0

ReadToEnd будет ждать завершения процесса. например, Console.ReadLine() в psExecFile может блокировать чтение. Но вы можете получить уже написанный поток,

            StreamReader output = p.StandardOutput;
            string line;
            while ((line = output.ReadLine()) != null)
            {
                Console.WriteLine(line);
            }
  • 0
    output.ReadLine() является нулевым, когда достигнут конец входного потока.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню