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