PowerShell – Captura de resultados de STDERR para commands de Git

Problema

Estoy tratando de capturar las salidas STDERR en un file de logging; sin embargo, he estado encontrando algunos problemas inconsistentes serios que están haciendo mi tarea más difícil.

En primer lugar, tengo mi ErrorActionPreference para 'Parar', que probablemente sea parte de los problemas que soporto.

En segundo lugar, he intentado con dos variantes para CADA command git en mi código que se muestra a continuación:

Variante 01

 & 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 

Variante 02

 & 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 

Hubo varias otras variantes en las que mezclé qué command usaba esa variante dependiendo de los problemas comunes que había encontrado.

Los principales problemas que he encontrado son:

1) cada STDERR que se encuentra una salida STDERR , se trata como un error de terminación, independientemente del post.

2) Mis bashs de crear declaraciones de Try/Catch han fallado debido a una serie de razones. Los códigos de salida no siempre fueron los mismos para los posts STDERR exitosos. No se pudieron usar coincidencias de text sin formatting para nada más que advertencias debido a posts que no siempre usan el mismo post o posts similares.

NOTA: Estoy tratando de hacer esto sin cambiar la ErrorActionPreference less que sea absolutamente necesario.

Pregunta

¿Alguien sabe cómo manejar el logging de los posts STDERR para los commands de git para que siempre registre las respuestas sin arrojar un error de terminación a exception de los verdaderos errores críticos?

Puedes intentar usar -q para suprimir la salida de git. Todavía debería error, si hay un error de git real.

Creo que también puedes ejecutarlo solo con Powershell, no con el ISE y debería funcionar correctamente

Parece que puedo responder mi propia pregunta esta vez.

Usando git-scm.com/docs , pude aprender que algunos de los commands de git tenían una opción --porcelain que me permite convertir las salidas en un formatting legible por máquina y canalizarlas a la salida. Luego, usando una combinación de >> y *>> según el command, se me ocurrió lo siguiente:

 & 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 

Esto me permitió get la información que quería grabar sin los falsos errores de terminación, y si necesitaba enmascarar algo (dirección IP, PI, etc.), podría hacerlo antes de que se registre o se muestre.

Si no hay necesidad de hacerlo, el uso de Tee-Object también ha sido extremadamente útil para lograr los resultados deseados al mismo time que desencadena los errores de forma adecuada en lugar de simplemente generar un error de terminación simplemente porque proviene de STDERR

    Intereting Posts