PowerShell Write-Host en archivo [con ejemplos]
Recientemente, se me pidió que escribiera la salida de Write-Host en un archivo en PowerShell. Investigué exhaustivamente para encontrar diferentes enfoques y mejores prácticas. En este tutorial, discutiremos todo sobre PowerShell Write-Host para archivar con ejemplos.
Para escribir la salida de Write-Host en un archivo en PowerShell, puede utilizar los cmdlets Start-Transcript y Stop-Transcript. para capturar toda la salida de la consola o redirigir el flujo de información con 5>&1 en PowerShell 5.0 y versiones posteriores. Otro enfoque es anular la función Write-Host para incluir un cmdlet Out-File, que enviará la salida tanto a la consola como a un archivo específico.
Comprender Write-Host en PowerShell
Entendamos qué hace Write-Host en PowerShell. El cmdlet Write-Host se utiliza para enviar texto, variables y datos formateados a la ventana de su consola. Esto proporciona comentarios valiosos durante la ejecución del script, pero de forma predeterminada, no envía el resultado a la canalización de PowerShell ni a un archivo.
Redirigir la salida del host de escritura a un archivo
Aunque Write-Host está diseñado para enviar resultados a la consola, existen soluciones para capturar estos resultados en un archivo. Analicemos algunos métodos y cómo implementarlos.
1. Uso de Iniciar-Transcripción y Detener-Transcripción
Una forma de capturar todo lo que aparece en la consola, incluida la salida Write-Host en PowerShell en un archivo, es mediante el uso de los cmdlets Start-Transcript y Stop-Transcript. Estos cmdlets inician y detienen la escritura de todas las interacciones con la consola de PowerShell.
Start-Transcript -Path "C:\MyFolder\Transcript.txt"
Write-Host "This is a message for the console and transcript file."
Stop-Transcript
Este script creará una transcripción de toda la salida de la consola, incluidas las declaraciones Write-Host, y la guardará en Transcript.txt.
Después de ejecutar el script de PowerShell usando el código VS, puede ver el resultado en la siguiente captura de pantalla.
2. Usando Out-File con Tee-Object
Otro método consiste en utilizar el cmdlet Out-File en combinación con Tee-Object. El cmdlet Tee-Object en PowerShell le permite enviar resultados a la consola y a un archivo simultáneamente.
"Output from Write-Host" | Tee-Object -FilePath "C:\MyFolder\Output.txt"
Write-Host "This message will appear in the console, but not in the file."En este ejemplo, solo se escribirá la primera línea en Output.txt, ya que Write-Host no envía datos por el proceso.
3. Uso de 5>&1 para redirigir el flujo de información
A partir de Windows PowerShell 5.0, Write-Host es un contenedor para Write-Information, que le permite redirigir el flujo de información (5) al flujo de salida exitoso (1). y luego a un archivo.
Write-Host "This will go to the file." 5>&1 | Out-File "C:\MyFolder\HostOutput.txt"Este comando redirigirá la salida de Write-Host a HostOutput.txt.
4. Uso de una función para capturar Write-Host
En PowerShell, también puede crear una función personalizada que anule Write-Host para capturar su salida y redirigirla a un archivo.
function Write-Host {
param([string]$message)
$message | Out-File "C:\MyFolder\HostOutputOverride.txt" -Append
Microsoft.PowerShell.Utility\Write-Host $message
}
Write-Host "This message will go to both the console and the file."Esta función agregará cada mensaje Write-Host a HostOutputOverride.txt mientras aún lo muestra en la consola.
5. Usar un host personalizado
Para una solución más avanzada, puede implementar un host personalizado que capture llamadas Write-Host y las redirija a un archivo.
class CustomHost : System.Management.Automation.Host.PSHost
{
# Implement required members...
}
$host = New-Object CustomHost
$host.ui.WriteLine("Redirected to file") | Out-File "C:\Output\CustomHostOutput.txt"
Este es un ejemplo simplificado y una implementación de host personalizada completa requeriría más código para definir completamente los miembros de la clase PSHost.
Mejores prácticas y consideraciones
Al redirigir la salida de Write-Host a un archivo, considere las siguientes mejores prácticas:
- Utilice
Write-Hostcon moderación, ya que está destinado a la salida de la consola y no al almacenamiento de datos. - Prefiera
Write-OutputoWrite-Informationcuando desee enviar datos a la canalización o a un archivo. - Asegúrese de que las rutas de archivo y los permisos estén configurados correctamente para evitar problemas de acceso.
- Recuerde que la salida de
Write-Hostno se captura de forma predeterminada al redirigir los flujos de salida.
Conclusión
Mientras que Write-Host se usa principalmente para mostrar mensajes en la consola en PowerShell; Varios métodos redirigen su salida a un archivo en PowerShell.
En este tutorial de PowerShell, he explicado 5 métodos diferentes para escribir la salida de Write-Host en un archivo en PowerShell.
