我需要能够启动进程并将输出读入变量。然后根据命令的返回,我可以选择显示完整输出或只显示选定的子集。
所以要清楚,我想启动基于文本的进程(实际上是psexec)并将该命令的输出(stdout,stderr等)读入变量,而不是将其直接输出到控制台。
答案 0 :(得分:5)
你遗漏了一些关于什么样的流程的细节,但我认为来自Powershell团队博客的this article有你想做的任何事情,无论是通过管道可执行文件的输出还是利用System.Diagnostics.Process
既然第二个选项听起来像你想要做的那样,你可以使用ProcessStartInfo
类作为true
属性输入RedirectStandardOutput
,然后从{{ 1}} StandardOutput
对象的属性,可以对输出执行任何操作。 Process
的工作方式相同。
答案 1 :(得分:1)
就读取变量而言,你应该能够做一些像
这样的事情$output = ps
这只会捕获stdout,而不是详细,警告或错误流。您可以通过测试特殊变量$?
来获取上一个命令的退出代码。
我认为可以使用更多信息来提供更完整的答案,但希望这可以通过某种方式满足您的需求。
答案 2 :(得分:1)
PowerShell Community Extensions包括启动流程。这实际上返回 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()