Есть ли у PowerShell эквивалент popen? - PullRequest
5 голосов
/ 23 октября 2008

Мне нужно иметь возможность запустить процесс и прочитать вывод в переменную. Затем, основываясь на возврате команды, я могу выбрать отображение полного вывода или только выбранного подмножества.

Итак, чтобы было ясно, я хочу запустить текстовый процесс (на самом деле psexec) и считывать вывод этой команды (stdout, stderr и т. Д.) В переменную, а не выводить ее непосредственно на консоль.

Ответы [ 3 ]

5 голосов
/ 23 октября 2008

Вы остановили некоторые детали относительно того, какого рода процесс, но я думаю, что эта статья из блога команды Powershell содержит все, что вы хотели бы сделать, будь то отправка выходных данных исполняемого файла или использование System.Diagnostics.Process.

Теперь, когда второй вариант звучит как то, что вы хотите сделать, вы можете использовать класс ProcessStartInfo для подачи true в качестве свойства RedirectStandardOutput, а затем читать из свойства StandardOutput Process объект, чтобы делать все, что вы хотите с выходом. StandardError работает идентично.

1 голос
/ 23 октября 2008

Расширения сообщества PowerShell включают Процесс запуска . Это фактически возвращает System.Diagnostics.Process .

> $proc = Start-Process pslist -NoShellExecute

Однако, хотя это возвращает объект Process , оно не позволяет вам перенаправить вывод перед выполнением. Для этого можно создать собственный процесс и выполнить его, сначала изменив элементы ProcessStartInfo :

> $proc = New-Object System.Diagnostics.Process
> $proc.StartInfo = New-Object System.Diagnostics.ProcessStartInfo("pslist.exe")
> $proc.StartInfo.CreateNoWindow = $true
> $proc.StartInfo.UseShellExecute = $false
> $proc.StartInfo.RedirectStandardOutput = $true
> $proc.Start()
> $proc.StandardOutput.ReadToEnd()
1 голос
/ 23 октября 2008

Что касается чтения вещей в переменные, вы просто должны иметь возможность сделать что-то вроде

$output = ps

Это будет захватывать только стандартный вывод, но не подробные потоки, предупреждения или сообщения об ошибках. Вы можете получить код завершения предыдущей команды, протестировав специальную переменную $?.

Я думаю, что для получения более полного ответа была бы полезна немного больше информации, но, надеюсь, это какой-то путь к тому, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...