2008-10-22 54 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()