Búsqueda de sitios web

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-Host con moderación, ya que está destinado a la salida de la consola y no al almacenamiento de datos.
  • Prefiera Write-Output o Write-Information cuando 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-Host no 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.

Artículos relacionados