2011-02-24 31 views
12

Tengo un montón de secuencias de comandos de PowerShell. Uno principal, que llama a otros niños. Esos scripts de PS a su vez invocan ventanas, scripts de CMD, scripts bash y aplicaciones de consola. Todos estos scripts y aplicaciones escriben mensajes en la consola. Los scripts de PowerShell, por ejemplo, están usando el scriptlet Write-Host para este propósito.PowerShell: envíe la salida de la consola al archivo sin ensordecer esta salida de la consola

Pregunta: ¿cómo puedo easely redirigir (enviar) todo esto salida de la consola a algún archivo, aunque no es ensordecedor (cancelar) esta salida de la consola? Quiero poder ver qué está sucediendo desde la salida de la consola y también tengo un historial de mensajes en el archivo de registro.

Gracias.

+0

¿Por qué utilizará 'Write-Host' si tiene la intención de hacer algo con la salida. 'Write-Host' hace exactamente eso: escribe algo en el host. Después de eso, está fuera de control tu script. Sin embargo, podría implementar su propio host, pero supongo que eso es menos divertido. – Joey

Respuesta

5

Puede intentar Start-Transcript y Stop-Transcript. Tiene un par de limitaciones como no capturar la salida exe nativa. También es global para la sesión de PowerShell.

+0

Parece que una combinación de 'Start-Transcript' y' Tee-Object' puede capturar todos los resultados, pero, desafortunadamente, a diferentes archivos. No es una manera fácil de fusionarlos – Roman

+0

También voté por la respuesta de Diadistis (Tee-Object), pero decidí aceptar la respuesta de Keith. En realidad, la solución final consiste en un híbrido de dos respuestas, como mencioné en comentarios anteriores. Dos archivos separados no son realmente un gran problema para mi caso. – Roman

6

Puede utilizar el tee equivalente de PowerShell: Tee-Object

PS: serverfault.com y/o superuser.com son más adecuados para una pregunta como ésta.

+1

Intenté Tee-Object anteriormente, pero no hace lo que esperaba. Solo guarda para archivar los resultados que se escriben con 'Write-Output' (a stdout) pero no con' Write-Host'. No puedo reemplazar todo 'Write-Host' por' Write-Output' en scripts PS. Además, Tee-Object ignora la salida de errores (stderr). Necesito ** todos ** resultados que veo en la consola para redirigirlos al archivo. E, idealmente, sin scripts de mayúsculas, reescritura lógica – Roman

1

Probablemente necesite escribir un host personalizado para hacer esto. No es algo terriblemente difícil de hacer, pero requiere un código administrado.

+0

Gracias, Mike. Pero esa solución no es apropiada para mi caso. – Roman

Cuestiones relacionadas