RedirectStandardError $ logFile和Append?

问题描述 投票:2回答:2

我有一个PowerShell脚本,在其中使用“启动过程”并将输出重定向到日志文件。该cmd处于for循环中,我希望每次运行都附加输出。现在,它每次运行时都会清除日志文件。有没有一种方法可以重定向和追加?

Start-Process $cmd -ArgumentList $cmdArgs -RedirectStandardError $logFile -Wait -NoNewWindow
powershell logging append start-process
2个回答
1
投票

注意:要同步执行控制台应用程序,将其称为直接c:\path\to\some.exe ...& $exePath ...),请not使用Start-Process-参见this answer ;这样,您可以直接使用$ouput = c:\path\to\some.exe ...捕获其输出,或者使用>>或通过管道传输到Add-Content将其输出附加到现有文件中。

此答案的其余部分解决了问题[[被询问:


否,(从PowerShell 7.0起)无法

append

使用Start-Process来预先存在的文件”Start-Process-RedirectStandardOutput参数-它们总是replace指定的输出文件。-RedirectStandardError显示了如何直接使用基础.NET API,允许您收集进程的输出

在内存中

,然后允许将其附加到现有文件中(例如,使用This answer)。这是一个简单的示例:

Add-Content

上面的内容类似:

Add-Content


0
投票
如果您仅通过直接调用cmd就可以摆脱困境,则可以尝试使用# 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错误到文件
© www.soinside.com 2019 - 2024. All rights reserved.