如何使用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
答案 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();