PowerShell Combine和Log Stderr / Stdout

时间:2014-05-15 15:59:26

标签: powershell

如何使用Start-Process在PowerShell中模仿此命令?

my.exe < my.inp 2>&1 | tee my.log

我尝试使用PS 3.0扩展输出重定向建议here,但日志文件仅包含有关该过程的信息。

$app = Start-Process -PassThru -FilePath my.exe -RedirectStandardInput my.inp 2>&1 | Tee-Object my.log
Wait-Process $app.Id

2 个答案:

答案 0 :(得分:1)

不要使用-PassThru,因为它会输出一个Process对象以及exe的另一个输出。此外,所有输出都被分配给$ app(不仅仅是Process对象)。并且所有输出都将显示在一个单独的窗口中,当my.exe运行时它会闪烁然后消失。看看这是否能帮到你:

Start-Process my.exe -NoNewWindow -Wait -RedirectStandardInput my.inp `
                     -RedirectStandardOutput foo.log `
                     -RedirectStandardError fooerr.log

答案 1 :(得分:0)

最终使用.NET对象。

$psi = New-Object System.Diagnostics.ProcessStartInfo 
$psi.CreateNoWindow = $true
$psi.RedirectStandardError = $true 
$psi.UseShellExecute = $false 
$psi.FileName = $EXE
$psi.RedirectStandardInput = $true
$psi.WorkingDirectory = $PWD

$process = New-Object System.Diagnostics.Process 
$process.StartInfo = $psi 
[void]$process.Start()

do
{
    $line = $process.StandardError.ReadLine()
    $line | Tee-Object "my.log" -Append
}
while (!$process.HasExited)    

$line = $process.StandardError.ReadToEnd()
$line | Tee-Object "my.log" -Append    

$process.Close();