powershell有相当于popen吗?

时间:2008-10-22 22:12:04

标签: powershell

我需要能够启动进程并将输出读入变量。然后根据命令的返回,我可以选择显示完整输出或只显示选定的子集。

所以要清楚,我想启动基于文本的进程(实际上是psexec)并将该命令的输出(stdout,stderr等)读入变量,而不是将其直接输出到控制台。

3 个答案:

答案 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()