我有一个PowerShell脚本,在其中使用“启动过程”并将输出重定向到日志文件。该cmd处于for循环中,我希望每次运行都附加输出。现在,它每次运行时都会清除日志文件。有没有一种方法可以重定向和追加?
Start-Process $cmd -ArgumentList $cmdArgs -RedirectStandardError $logFile -Wait -NoNewWindow
注意:要同步执行控制台应用程序,将其称为直接(c:\path\to\some.exe ...
或& $exePath ...
),请not使用Start-Process
-参见this answer ;这样,您可以直接使用$ouput = c:\path\to\some.exe ...
捕获其输出,或者使用>>
或通过管道传输到Add-Content
将其输出附加到现有文件中。
此答案的其余部分解决了问题[[被询问:
append
使用Start-Process
来预先存在的文件”Start-Process
和-RedirectStandardOutput
参数-它们总是replace指定的输出文件。-RedirectStandardError
显示了如何直接使用基础.NET API,允许您收集进程的输出在内存中
,然后允许将其附加到现有文件中(例如,使用This answer)。这是一个简单的示例:上面的内容类似:
Add-Content
# Create a sample file that represents the preexisting output file:
'before' > out.txt
# Create a ProcessStartInfo instance
# with the relevant properties.
$psi = [System.Diagnostics.ProcessStartInfo] @{
# For demo purposes, use a simple `cmd.exe` command that echoes the
# cmd.exe version number.
FileName = 'cmd.exe'
Arguments = '/c ver'
# Ask that output be captured in the
# .StandardOutput / .StandardError properties of
# the Process object created later.
UseShellExecute = $false # prerequisite
RedirectStandardOutput = $true
RedirectStandardError = $true
}
# Create (launch) the process...
$ps = [System.Diagnostics.Process]::Start($psi)
# ... and wait for it to exit.
$ps.WaitForExit()
# Read the captured standard output.
$stdout = $ps.StandardOutput.ReadToEnd()
# Append it to the output file:
Add-Content out.txt -Value $stdout
# Output the updated output file.
Get-Content out.txt
:before
Microsoft Windows [Version 10.0.18363.720]
请参见2>>
以获取更多详细信息:命令2 >>文件名#APPEND错误到文件