5

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

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

4

3 回答 3

5

你遗漏了一些关于什么样的过程的细节,但我认为Powershell 团队博客中的这篇文章有你想做的任何事情,无论是在某处管道传输可执行文件的输出,还是利用System.Diagnostics.Process.

既然第二个选项听起来像您想要做的,您可以使用ProcessStartInfo该类true作为RedirectStandardOutput属性输入,然后从对象的StandardOutput属性中读取Process以对输出执行任何您想要的操作。 StandardError工作原理相同。

于 2008-10-22T22:22:41.793 回答
1

就将内容读入变量而言,您应该能够执行类似的操作

$output = ps

不过,这只会捕获标准输出,不会捕获详细、警告或错误流。您可以通过测试特殊变量来获得上一条命令的退出代码$?

我认为更多信息将有助于提供更完整的答案,但希望这是您正在寻找的某种方式。

于 2008-10-22T22:36:18.067 回答
1

PowerShell 社区扩展包括Start -Process。这实际上返回一个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()
于 2008-10-22T23:22:56.227 回答