2008-10-22 56 views
5

我需要能够启动一个进程并将输出读入一个变量。然后基于命令的返回,我可以选择显示全部输出或仅显示一个选定的子集。我想要启动一个基于文本的进程(实际上是psexec),并将该命令(stdout,stderr等)的输出读入一个变量,而不是直接输出到控制台。PowerShell有一个相当于popen吗?

回答

5

你忘了关于什么样的过程的一些细节,但我认为Powershell Team Blog的this article有你想做的任何事情,无论是从某个地方管道可执行文件的输出或利用System.Diagnostics.Process

现在,第二个选项听起来像你想做什么,你可以使用ProcessStartInfotrue饲料为RedirectStandardOutput属性,然后从Process对象的StandardOutput财产读做任何你想要的输出。 StandardError的工作原理完全相同。

+0

不知道你是如何更清晰的希望。我想捕获由powershell发布的命令的输出...像popen。该页面似乎只列出了启动processse的方法。 – vfilby 2008-10-22 22:33:37

1

至于阅读的东西到变量而言,你应该能够做到像

$output = ps 

这将只能捕获标准输出,虽然不是冗长,警告或错误流。您可以通过测试特殊变量$?来获取上一个命令的退出代码。

我认为更多的信息可以用来提供更完整的答案,但希望这可以通过某种方式找到您要找的东西。

1

PowerShell Community Extensions包括启动过程。这实际上返回System.Diagnostics.Process

> $proc = Start-Process pslist -NoShellExecute 

然而,尽管这将返回过程对象它不允许你将输出重定向执行之前进行。要做到这一点你可以创建自己的过程,并通过先修改的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()