我正在尝试将STDERR
输出捕获到日志文件中;但是,我遇到了一些严重的不一致问题,这些问题使我的任务更加困难。
首先,我有ErrorActionPreference
到'停止',这可能是我忍受的问题的一部分。
其次,我在下面显示的代码中为EACH git命令尝试了两种变体:
& git add $path2File 2>&1 | Out-File "$LogPath\$tmpLogName" -Append
& git commit -m "Some logical update message" 2>&1 | Out-File "$LogPath\$tmpLogName" -Append
& git status 2>&1 | Out-File "$LogPath\$tmpLogName" -Append
& git push 2>&1 | Out-File "$LogPath\$tmpLogName" -Append
& git add $path2File 2>&1 >> "$LogPath\$tmpLogName" -Append
& git commit -m "Some Logical update message" 2>&1 >> "$LogPath\$tmpLogName" -Append
& git status 2>&1 >> "$LogPath\$tmpLogName" -Append
& git push 2>&1 >> "$LogPath\$tmpLogName" -Append
还有其他一些变体,其中混合了哪个命令根据我遇到的常见问题使用哪个变体。
我遇到的主要问题是:
1)每当遇到STDERR
输出时,无论消息如何,都会将其视为终止错误。
2)由于多种原因,我创建自定义Try/Catch
语句的尝试失败了。成功的STDERR
消息的退出代码并不总是相同。由于消息并不总是使用相同或类似的消息,因此无法将纯文本匹配用于除警告之外的任何内容。
注意:我试图在不更改ErrorActionPreference
的情况下执行此操作,除非绝对必要。
有没有人知道如何处理为git命令记录STDERR
消息,以便它始终记录响应而不会引发终止错误,除了真正的严重错误?
答案 0 :(得分:1)
这次看起来我可以回答我自己的问题。
使用git-scm.com/docs我能够了解到某些git命令有一个--porcelain
选项,它允许我将输出转换为机器可读格式并将它们输出到输出。然后,根据命令使用>>
和*>>
的组合,我想出了以下内容:
& git checkout --track $branch >> $logFilePath
# some set of actions
& git add . *>> $logFilePath
& git commit -m "some automated update message" *>> $logFilePath
& git status --porcelain >> $logFilePath
& git push --porcelain >> $logFilePath
这使我能够获得我想要记录的信息而没有错误的终止错误,如果我需要屏蔽任何内容(IP地址,PI等),我可以在记录或显示之前这样做。
如果没有必要这样做,使用Tee-Object
对于实现期望的结果也非常有帮助,同时仍然适当地触发任何错误而不仅仅因为它来自STDERR
答案 1 :(得分:0)
您可以尝试使用-q来抑制git输出。如果存在实际的git错误,它仍然应该是错误的。
我认为您也可以在Powershell中运行它,而不是ISE并且它应该正常运行