Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell-捕获Git命令的STDERR输出 问题_Git_Powershell_Logging_Error Handling_Stderr - Fatal编程技术网

PowerShell-捕获Git命令的STDERR输出 问题

PowerShell-捕获Git命令的STDERR输出 问题,git,powershell,logging,error-handling,stderr,Git,Powershell,Logging,Error Handling,Stderr,我试图将STDERR输出捕获到日志文件中;然而,我一直遇到一些严重的不一致的问题,使我的任务更加困难 首先,我的ErrorActionPreference要“停止”,这可能是我正在忍受的问题的一部分 其次,我在下面显示的代码中为每个git命令尝试了两种变体: 变体01 变体02 根据我遇到的常见问题,还有其他几个变体,我混淆了使用哪个命令和哪个变体 我遇到的主要问题是: 1) 每当遇到STDERR输出时,无论消息如何,都会将其视为终止错误 2) 由于多种原因,我尝试创建自定义Try/Catch语

我试图将
STDERR
输出捕获到日志文件中;然而,我一直遇到一些严重的不一致的问题,使我的任务更加困难

首先,我的
ErrorActionPreference
要“停止”,这可能是我正在忍受的问题的一部分

其次,我在下面显示的代码中为每个git命令尝试了两种变体:

变体01 变体02 根据我遇到的常见问题,还有其他几个变体,我混淆了使用哪个命令和哪个变体

我遇到的主要问题是:

1) 每当遇到
STDERR
输出时,无论消息如何,都会将其视为终止错误

2) 由于多种原因,我尝试创建自定义
Try/Catch
语句失败。对于成功的
STDERR
消息,退出代码并不总是相同的。由于消息并不总是使用相同或类似的消息,因此无法对警告以外的任何内容使用纯文本匹配

注意:我尝试在不更改
ErrorActionPreference
的情况下执行此操作,除非绝对必要

问题:
是否有人知道如何记录git命令的
STDERR
消息,以便它总是记录响应而不抛出终止错误(真正的严重错误除外?

您可以尝试使用-q来抑制git输出。如果存在实际的git错误,它仍然应该是错误的


我想您也可以在Powershell中运行它,而不是在ISE中运行,它应该可以正常工作

看来这次我可以回答自己的问题了

通过使用,我了解到一些git命令有一个
--cerial
选项,它允许我将输出转换为机器可读的格式,并通过管道将它们传输到输出。然后,根据命令,结合使用
>
*>
,我得出以下结论:

& 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而生成终止错误。不幸的是,这不是我想要的。我不是试图压制这些信息,也不是默默地绕过它们。我需要这些信息来显示和捕获它们。你能试试看它是否适合你的目的吗?尝试{invoke expression“git command-q”}catch{$};据我所知,使用-q调用表达式将抑制正常输出,只捕获错误,然后在try/catch中捕获错误。我非常感谢您的尝试,但这种方法存在一个巨大的问题。使用
-q
-quiet
会抑制输出,这对我的目标不利。我不仅必须获得捕获/触发的错误,还需要显示所有输出(信息、警告、错误等)并记录该输出。这就是为什么
-q
对我不起作用的原因。
& 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
& 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