Magic Quadrant™ para la gestión de acceso privilegiado 2025: Netwrix reconocida por cuarto año consecutivo. Descarga el informe.

Plataforma
Centro de recursosBlog
PowerShell Write to File: "Out-File" y técnicas de salida de archivo

PowerShell Write to File: "Out-File" y técnicas de salida de archivo

Nov 21, 2024

La salida de PowerShell va a la consola por defecto, pero puedes redirigir los resultados a archivos para registrar, informar, automatizar o solucionar problemas. El cmdlet Out-File ofrece control total sobre la codificación, el ancho de línea y el comportamiento de sobreescritura, mientras que los operadores de redirección (>, >>) son más rápidos para trabajos sencillos. Alternativas como Set-Content, Add-Content, o incluso Export-Csv/ConvertTo-Json son mejores cuando necesitas datos estructurados. Usa -Append , -NoClobber, Test-Path, y la redirección de errores (2>, 3>) para gestionar los registros de forma segura.

Introducción a la generación de resultados en PowerShell

Cualquiera que esté familiarizado con PowerShell sabe que la salida de los comandos de PowerShell se muestra en la terminal por defecto. Sin embargo, puede haber situaciones en las que querrías redirigir o guardar la salida en un archivo.

  • Los comandos pueden devolver una gran cantidad de datos que son difíciles de manejar en tiempo real. Puede redirigir o guardar estos datos para procesarlos o revisarlos cuando le sea conveniente.
  • Para utilizar los resultados de un comando en otro proceso o script, puedes usar el comando de PowerShell output to file para guardar la salida en un archivo o variable y reutilizarla fácilmente.
  • Los trabajos programados u otras tareas automatizadas suelen ejecutarse en segundo plano. Puede que no puedas ver la salida en tiempo real, por lo que guardarla te permite revisarla más tarde.
  • A veces, la salida puede contener más información de la que necesitas. Por lo tanto, puedes redirigirla o guardarla para filtrarla y formatearla.
  • Cuando ejecutas comandos en sistemas remotos, es posible que no tengas acceso a la consola para ver la salida en tiempo real. Guardar o redirigir te proporciona un registro de lo que sucedió en el sistema remoto.
  • Las organizaciones generan informes basados en estados del sistema, configuraciones o métricas de rendimiento. Utilizando PowerShell, pueden consultar datos del sistema, generar informes y exportarlos a un archivo para su revisión futura.
  • PowerShell puede utilizarse para recopilar información de inventario de hardware y software para la gestión de activos y el cumplimiento. Estos datos pueden luego exportarse a un archivo para obtener mayor visibilidad y simplificar la gestión.
  • Al automatizar tareas, es esencial rastrear las acciones realizadas y los resultados. Redirigir la salida a un archivo ayuda a crear registros para auditoría.
  • Si un script falla, necesitas conocer la causa raíz. Al guardar la salida, puedes revisarla más tarde para el manejo de errores, depuración y resolución de problemas.

En resumen, redirigir o guardar la salida de PowerShell aumenta la productividad, ayuda con la depuración, proporciona registros útiles y facilita la automatización, especialmente en flujos de trabajo complejos o al trabajar con grandes conjuntos de datos.

Métodos principales para exportar resultados de PowerShell a archivos

El Cmdlet Out-File

El método de PowerShell para escribir en un archivo de texto comúnmente utiliza el cmdlet Out-File para enviar los resultados de los comandos (salida) directamente a un archivo. En su forma más simple, Out-File requiere especificar una ruta y nombre de archivo para escribir la salida.

De forma predeterminada, el cmdlet sobrescribe un archivo existente si hay uno con el mismo nombre en la ruta especificada, o crea uno nuevo si no existe.

Sintaxis de Out-File

Aquí está la sintaxis básica para el cmdlet Out-File:

      Out-File
[-FilePath] <cadena>
[[-Encoding] <Encoding>]
[-Append]
[-Force]
[-NoClobber]
[-Width <int>]
[-NoNewline]
[-InputObject <psobject>]
[-WhatIf]
[-Confirmar]
[<CommonParameters>]
      

Parámetros

El cmdlet Out-File de PowerShell acepta los siguientes parámetros:

Parámetro

Descripción

-Filepath

Establece la ruta y el nombre del archivo de salida

-Codificación <Encoding>

Establece la codificación para el archivo de salida. Las opciones incluyen ASCII, UTF8, UTF7, Unicode, etc. El valor predeterminado es utf8NoBOM.

-Anexar

Añade la salida al final del archivo sin sobrescribir el contenido existente

-Force

Invalida el atributo de solo lectura y sobrescribe un archivo existente de solo lectura. Este parámetro no anula las restricciones de seguridad.

-NoClobber

Evita sobrescribir un archivo existente. De forma predeterminada, si un archivo existe en la ruta especificada, el cmdlet Out-File sobrescribe el archivo sin advertencia.

-Ancho

Limita el número de caracteres en cada línea del archivo de salida (por defecto 80). Cualquier carácter adicional se trunca, no se ajusta.

-NoNewLine

Especifica que el contenido escrito en el archivo de salida no termina con un carácter de nueva línea. No se insertan espacios ni nuevas líneas entre las cadenas de salida y no se añade una nueva línea después de la última cadena de salida.

-InputObject

Especifica los objetos que se escribirán en el archivo. Escriba un comando o expresión que obtenga los objetos o introduzca una variable que contenga los objetos.

-WhatIf

Ejecuta el cmdlet en modo de prueba para mostrar los resultados esperados del cmdlet

-Confirmar

Solicita confirmación antes de ejecutar el cmdlet

Casos de uso

Para escribir la salida directamente en un archivo en lugar de mostrarla en pantalla, puede utilizar el enfoque de PowerShell write output to file anexando el cmdlet Out-File a un comando o variable de PowerShell. Esta técnica también funciona para escribir una cadena de texto en un archivo anexando Out-File directamente a la cadena.

Agregue Out-File a un cmdlet de PowerShell

Para recuperar una lista de procesos en ejecución y utilizar el método de PowerShell para guardar la salida en un archivo, guarde la salida en un archivo de texto llamado “Processes” en la carpeta C:\Temp con el siguiente ejemplo:

Get-Process | Out-File -FilePath C:\Temp\processes.txt

Aquí, el cmdlet Get-Process enlistará todos los procesos en ejecución. Con la funcionalidad de PowerShell para redirigir la salida a un archivo, puedes tomar la salida de un comando y guardarla inmediatamente en un archivo de texto para su análisis posterior.

Anexar Out-File a una cadena de texto

Para escribir una cadena utilizando el método de PowerShell para escribir cadenas en un archivo, como agregar “Hello, World!” a un archivo de texto llamado “Test” en la ubicación C:\Temp, utilice el siguiente cmdlet:

"¡Hola, Mundo!" | Out-File -FilePath C:\Temp\Test.txt

Si el archivo no existe, se creará. Si ya existe, el contenido se sobrescribirá por defecto.

Anexar Out-File a una Variable

También puedes utilizar el cmdlet Out-File con una variable. Por ejemplo:

$variable | Out-File -FilePath "C:\path\to\file.txt"

Aquí $variable es la variable que contiene los datos (por ejemplo, una salida de PowerShell a un archivo de texto o la salida de un comando) que desea enviar a un archivo.

Operadores de redirección (> y >>)

Los operadores de redirección (> y >>) en PowerShell son una alternativa simple y rápida al cmdlet Out-File, que te permite redirigir la salida a un archivo.

  • El operador > es equivalente al cmdlet Out-File sin parámetros adicionales. Sobrescribe el archivo si existe, o crea uno nuevo si no existe.
  • El operador >> es equivalente a Out-File -Append. Añade la salida al archivo si este existe, o crea uno nuevo si no existe.

Estos operadores también tienen otros usos como redirigir flujos de salida de error o verbosos, lo cual está más allá del alcance de este artículo.

Sintaxis básica

La sintaxis básica para usar los operadores es la siguiente:

<Command> > <Path> # Sobrescribe

<Command> >> <Path> # Añade al final

Tenga en cuenta que los operadores de redirección no utilizan ningún parámetro.

Ejemplo 1 – Usando el operador >

Este cmdlet escribe la salida de Get-Process en el archivo Processes.txt, sobrescribiendo cualquier contenido existente en caso de que ya haya un archivo con este nombre en el destino.

Get-Process > C:\Temp\Processes.txt

Ejemplo 2 – Uso del operador >>

Este cmdlet agrega la fecha y hora actual al final del archivo log.txt sin sobrescribir el contenido existente.

Get-Date >> C:\Temp\log.txt

Si un archivo llamado log.txt no existe en la ruta especificada, crea el archivo y escribe la fecha y hora actuales en él.

Cmdlet Out-File versus Operadores de Redirección (> y >>)

Tanto el cmdlet Out-File como los operadores de redirección pueden escribir y añadir la salida de PowerShell a un archivo. Las diferencias clave entre los dos se discuten a continuación.

Característica

Cmdlet Out-File

Operadores de redirección (> y >>)

Parámetros

Acepta parámetros

No acepta parámetros

Comportamiento de sobrescritura

La opción predeterminada es sobrescribir; utiliza -Append para adjuntar y -NoClobber para evitar sobrescrituras

> sobrescribe, >> anexa No hay un control incorporado para prevenir la sobrescritura

Control de codificación

Permite especificar la codificación con -Encoding

Control de codificación limitado (UTF-8 en PowerShell 6+, Unicode en versiones anteriores)

Control de ancho

Admite la configuración del ancho de línea con -Width

Sin control sobre el ancho de línea

Manejo de errores

Solo se exportan los resultados exitosos, por lo que las advertencias o errores no se escriben en el archivo

Puede especificar qué flujo desea exportar, como éxito, error, advertencia, etc.

Uso en scripts

Ideal para scripts que requieren más control sobre el resultado

Rápido y conveniente para una redirección simple

Cuándo usar cada uno

En comparación, el cmdlet Out-File es más versátil e ideal para scripts complejos, con opciones para codificación, ancho y control de sobrescritura. Sin embargo, los operadores de redirección son rápidos y convenientes para trabajos de salida rápidos que no requieren personalización. A continuación, se presenta una breve guía sobre cuándo debe usar cada uno.

Cuándo usar el cmdlet Out-File

  • Para codificaciones específicas (por ejemplo, ASCII, UTF8, Unicode)
  • Para evitar sobrescribir archivos (usando -NoClobber)
  • Para controlar el ancho de línea de la salida (usando -Width)
  • En modo de agregado mientras se mantienen otras opciones de control de salida

Cuándo usar > y >>

  • Cuando desees una redirección rápida de salida sin formateo adicional o codificación
  • Cuando se desea sobrescribir (>) o añadir (>>) al archivo existente

Tutorial Windows PowerShell Scripting (PDF) para Principiantes

Más información

Técnicas avanzadas de salida de archivos

Gestionar Sobrescrituras

De forma predeterminada, el cmdlet Out-File sobrescribe un archivo existente si hay uno con el mismo nombre en la ruta especificada, o crea un archivo nuevo si no existe.

Para evitar sobrescribir un archivo existente, puede utilizar el método de anexar al escribir en un archivo con PowerShell de dos maneras:

  • Añadir (adjuntar) la salida al archivo existente
  • Evite sobrescribir, de modo que el archivo existente no será reemplazado y el resultado no se guardará en el archivo

Anexar salida

Utilice el parámetro -Append con el cmdlet Out-File para añadir la nueva salida al final del archivo especificado sin sobrescribir su contenido existente. Esto es particularmente útil cuando, por ejemplo, desea registrar eventos de manera incremental sin perder datos previos.

Este comando añade las cinco entradas más recientes del registro del sistema al archivo event_log.txt.

Get-EventLog -LogName System -Newest 5 | Out-File -FilePath C:\Temp\event_log.txt -Append

También puedes utilizar el operador de redirección >> para añadir la salida a un archivo existente. En el siguiente ejemplo, el estado y los detalles de los servicios en tu máquina local se añaden al contenido en el archivo log.txt.

Get-Service >> C:\Temp\log.txt

Evitar sobrescritura

Utilice el parámetro -NoClobber con el cmdlet Out-File para evitar sobrescrituras. Por lo tanto, si un archivo con el mismo nombre existe en la ubicación especificada, PowerShell no lo sobrescribirá y lanzará un error. Esto ayuda a proteger archivos importantes.

El siguiente comando intentará crear un archivo llamado log.txt en la carpeta Temp. Pero si ya existe un archivo con este nombre, se mostrará un error y la salida no se guardará en el archivo.

Get-Service | Out-File -FilePath C:\Temp\log.txt -NoClobber

Image

Forzar sobrescritura

A veces no puedes sobrescribir el contenido de un archivo existente con la salida de un cmdlet de PowerShell, ya que el archivo es de solo lectura. En una situación como esta, usa el parámetro -Force con el cmdlet Out-File para sobrescribir archivos de solo lectura.

Este cmdlet escribe la información de los servicios en el archivo Services.txt, asegurando que si el archivo Services.txt ya existe, será sobrescrito, incluso si es de solo lectura.

Get-Service | Out-File -FilePath C:\Temp\Services.txt -Force

Formato y codificación de salida

El cmdlet Out-File de PowerShell ofrece opciones para personalizar el formato de salida y la codificación.

Formato de salida

El cmdlet Out-File puede no mostrar la salida como se espera, especialmente cuando la salida tiene múltiples columnas. Para obtener una salida formateada y legible, puede ajustar el ancho o usar el cmdlet Format-Table.

Ejemplo 1 – Establezca el Ancho

Utilice el parámetro -Width con Out-File para especificar el ancho de línea del archivo de salida (el predeterminado es de 80 caracteres).

Este cmdlet escribe la información de los servicios en el archivo Services.txt, mientras establece el ancho de línea en 200 caracteres. Esto permite una salida más amplia sin ajuste de texto.

Get-Service | Out-File -FilePath C:\Temp\Services.txt -Width 200

Ejemplo 2 – Formato con Format-Table

Utilice el cmdlet Format-Table para estructurar los datos antes de enviarlos al cmdlet Out-File.

Este cmdlet utiliza Format-Table -AutoSize para ajustar automáticamente el ancho de las columnas y mejorar la legibilidad.

Get-Service | Format-Table -AutoSize | Out-File -FilePath C:\Temp\Services.txt

Establecer codificación

La codificación de la salida en PowerShell al usar el cmdlet Out-File asegura que los datos se interpreten, muestren y sean compatibles correctamente en diferentes sistemas y aplicaciones.

El parámetro -Encoding ayuda a especificar cómo se codifica el texto de salida en el archivo. Los tipos de codificación comunes incluyen:

  • UTF8 – Común para aplicaciones web, soporta todos los caracteres.
  • ASCII – Limitado a caracteres básicos del inglés, compacto pero restrictivo.
  • Unicode (UTF-16) – Bueno para la compatibilidad con Windows, puede manejar una amplia gama de caracteres especiales, símbolos y texto internacional, pero utiliza más espacio.
  • Predeterminado – Utiliza la codificación predeterminada del sistema, que puede variar y ser impredecible en diferentes plataformas.

Ejemplo 1 — Utilice la codificación UTF-8

Es una buena idea utilizar la codificación UTF-8 si el archivo de salida contiene caracteres especiales o si el archivo se va a utilizar en entornos donde UTF-8 es la codificación estándar.

Este cmdlet recupera una lista de servicios en el sistema y envía la información al archivo Services.txt mientras establece la codificación del archivo en UTF-8.

Get-Service | Out-File -FilePath C:\Temp\Services.txt -Encoding UTF8

Ejemplo 2 — Utilice la codificación ASCII

La codificación ASCII se utiliza comúnmente para archivos de texto más simples.

Este cmdlet recupera una lista de servicios en el sistema y canaliza las salidas al archivo Services.txt. El parámetro -Encoding se utiliza para convertir la salida al formato ASCII.

Get-Service | Out-File -FilePath C:\Temp\Services.txt -Encoding ASCII

Manejo de flujos de salida específicos

El cmdlet Out-File escribe el resultado exitoso de su comando o script en un archivo. Pero no escribe errores, advertencias o tipos específicos de mensajes en archivos. Esto se puede lograr con el operador de redirección, que le permite especificar qué flujo desea enviar a un archivo.

Operador

Descripción / Stream

Escriba cmdlet

>

Éxito solamente

Write-Output

2>

Error only

Write-Error

3>

Advertencia solamente

Write-Warning

4>

Solo detallado

Write-Verbose

5>

Depurar solamente

Write-Debug

6>

Solo información

Write-Information

*>

Todo

Ejemplo 1 — Enviar mensajes de error al archivo

Este comando intenta listar (ls) un archivo llamado Readme. Busca el archivo en el directorio actual si no se especifica una ruta. Si el archivo no existe, genera un mensaje de error. El operador 2> redirige este error a un archivo llamado error.log. Como resultado, el error no se muestra en pantalla sino que se guarda en error.log en la carpeta Temp.

ls Readme 2> C:\Temp\error.log

Image

Ejemplo 2 — Enviar advertencias al archivo

En PowerShell, el flujo de advertencias es el número de flujo 3. Puedes usar 3> para redirigir las advertencias a un archivo: Es como sigue:

# Comando que genera una advertencia

<Your-Command> 3> C:\Temp\warning_log.txt

Métodos alternativos para la salida

Cmdlets Set-Content y Add-Content

Los cmdlets Set-Content y Add-Content son otra forma de escribir la salida en un archivo.

  • Set-Content sobrescribe el contenido existente en el archivo con el nuevo contenido proporcionado. Si el archivo no existe, lo crea.
  • Add-Content añade nuevo contenido al final del contenido existente del archivo. Si el archivo no existe, lo creará, pero no reemplazará el contenido existente.

El cmdlet Set-Content

Utilice el cmdlet Set-Content para escribir o reemplazar el contenido de un archivo con contenido nuevo.

Este cmdlet sobrescribe el contenido existente en el archivo Test.txt. El parámetro -Value especifica el contenido o texto que reemplazará al contenido existente.

Set-Content -Path C:\Temp\Test.txt -Value "Añadir contenido aquí"

El cmdlet Add-Content

Utilice el cmdlet Add-Content para agregar contenido a un archivo, lo que significa que puede añadir nuevos datos a un archivo existente sin sobrescribirlo. Add-Content también puede añadir contenido a varios archivos a la vez.

Al igual que el cmdlet Out-File y el operador de redirección, el cmdlet Add-Content crea un nuevo archivo si no existe un archivo con el mismo nombre.

Ejemplo 1 — Añadir texto a un archivo

Este cmdlet agrega nuevo texto al archivo Test.txt. El parámetro -Value especifica el contenido o texto que desea añadir al archivo.

Add-Content -Path C:\Temp\Test.txt -Value "Nueva línea para agregar"

Si el archivo es de solo lectura, debe usar el parámetro -Force para permitir que se agregue contenido.

Ejemplo 2 — Añadir texto a varios archivos

Para agregar el mismo contenido a varios archivos, tienes varias opciones.

  • Utilice comodines en la ruta para especificar los archivos que desea actualizar
  • Excluya los nombres de archivos que no desea actualizar

Este cmdlet agrega la fecha actual a todos los archivos .txt en la carpeta Temp, excepto en el archivo con test en el nombre del archivo:

Add-Content -Path C:\Temp\files\*.txt -Value (Get-Date) -Exclude "test*"

Ejemplo 3 — Añadir múltiples líneas de texto

Este comando añade múltiples líneas de texto al archivo Test.txt.

      $lines = @(
"Line 1: Details",
"Line 2: Specific Details"
)
Add-Content -Path C:\Temp\Test.txt -Value $lines
      

.Net Classes

Puede utilizar clases de .NET para generar salida a un archivo, especialmente en escenarios avanzados que involucran el manejo de grandes datos. Estas clases son:

  • BinaryWriter – Escribe tipos de datos primitivos en forma binaria a un flujo.
  • StreamWriter – Utilizado para escribir caracteres en un flujo con una codificación específica. A menudo se usa para crear o modificar archivos de texto.
  • StringWriter – escribe información en una cadena. Con esta clase, PowerShell almacena la información de la cadena en un objeto StringBuilder.

Usar la clase StreamWriter en C# para enviar la salida a un archivo es sencillo. El siguiente ejemplo muestra cómo puedes utilizarla.

      # Get the directories in C:\
$Dirs = Get-ChildItem -Path C:\ -Directory
# Open a stream writer
$File = 'C:\Temp\Dirs.txt'
$Stream = [System.IO.StreamWriter]::new($File)
# Write the folder names for these folders to the file
foreach($Dir in $Dirs) {
$Stream.WriteLine($Dir.FullName)
}
# Close the stream
$Stream.Close()
      

Este script realiza los siguientes pasos para listar directorios en la unidad C:\ y guardar sus rutas en un archivo de texto:

Paso 1:

$Dirs = Get-ChildItem -Path C:\ -Directory

Esta línea utiliza Get-ChildItem con el parámetro -Directory para obtener solo los directorios (no archivos) en la unidad C:\. El resultado se almacena en la variable $Dirs como una lista de objetos de directorio.

Paso 2:

$File = 'C:\Temp\Dirs.txt'

$Stream = [System.IO.StreamWriter]::new($File)

Estas líneas configuran una ruta de archivo (C:\Temp\Dirs.txt) donde se guardará la lista de directorios y luego inicializan un objeto StreamWriter para escribir en ese archivo. Este objeto se asigna a $Stream.

Paso 3:

foreach($Dir en $Dirs) {

$Stream.WriteLine($Dir.FullName)

}

Este bucle recorre cada objeto de directorio en $Dirs. Para cada directorio, escribe la ruta completa ($Dir.FullName) en el archivo utilizando $Stream.WriteLine.

Paso 4:

$Stream.Close()

Después de escribir todas las rutas de directorio, el script cierra el StreamWriter.

Reserve una Demostración Individual para Netwrix Directory Manager:

Mejores prácticas para la salida de archivos de PowerShell

Establezca el ancho de línea correcto para evitar el truncamiento

Debe establecer el ancho de línea correcto con el parámetro -Width en PowerShell para evitar la truncación de líneas largas y asegurar que los archivos de salida estén formateados como se pretende.

El parámetro -Width en el cmdlet Out-File controla el número máximo de caracteres por línea en la salida. Por defecto, está configurado a 80 caracteres, lo que puede truncar líneas más largas. Puedes, por ejemplo, aumentar el ancho a 200 caracteres, como se muestra a continuación:

Get-Process | Out-File -FilePath "output.txt" -Width 200

Considere lo siguiente:

  • Para evitar espacios en blanco innecesarios o truncamientos, establezca un -Width para que coincida con la línea más larga. Para la mayoría de las salidas, un ancho de 120–200 caracteres debería funcionar bien.
  • Para datos con muchas columnas (como un archivo CSV), establezca un ancho mayor para acomodar la línea completa.
  • En un pipeline, utilice Out-String -Width para controlar el ancho de línea, asegurándose de que la línea entera quepa dentro del ancho especificado antes de enviarla a Out-File.

Establezca la codificación correcta

La codificación predeterminada que utiliza PowerShell varía, dependiendo del cmdlet y de la versión de PowerShell que esté utilizando. La siguiente tabla muestra la codificación predeterminada utilizada:

Cmdlet / Operador


PowerShell 5.1 (y versiones anteriores) Codificación predeterminada


Codificación predeterminada de PowerShell Core / PowerShell 7+


Out-File, Set-Content, Add-Content


UTF-16LE (Unicode)


UTF-8 (sin BOM)


>, >> (Redirección)


ASCII


UTF-8 (sin BOM)


Se recomienda la codificación UTF-8 para la compatibilidad entre sistemas. Sin embargo, para sistemas heredados, es posible que desee especificar -Encoding ASCII o -Encoding Unicode.

Utilice $PSDefaultParameterValues para establecer valores predeterminados en los scripts

$PSDefaultParameterValues en PowerShell le permite establecer valores predeterminados para parámetros a través de scripts y sesiones, ofreciendo una manera de garantizar la consistencia sin tener que especificar opciones repetidamente.

Aquí se explica cómo puede establecer un valor predeterminado global para que Out-File use codificación UTF8 y un ancho más amplio.

$PSDefaultParameterValues["Out-File:Encoding"] = "UTF8"

$PSDefaultParameterValues["Out-File:Width"] = 200

Combine Out-File con Format-Table y Format-List para obtener una salida mejor estructurada

Combinar el cmdlet Out-File con Format-Table o Format-List es una excelente manera de producir archivos de texto de salida bien estructurados y legibles.

Format-Table

Format-Table es mejor para datos con una estructura clara de filas y columnas. Crea un formato organizado y fácil de leer similar a una tabla. Sin embargo, para usarlo con el cmdlet Out-File, considere lo siguiente:

  • Utilice el parámetro -Property para especificar solo las columnas que necesita. Esto evitará desorden en el archivo de salida.
  • Utilice el parámetro -AutoSize para optimizar el ancho de la columna y ajustarlo al contenido. Esto reducirá el espacio en blanco extra o la truncación.
  • Utilice el parámetro -Width para evitar la truncación y mantener la salida alineada.

Aquí hay un ejemplo:

Get-Process | Format-Table -Property Name, ID, CPU, WS -AutoSize | Out-File -FilePath "ProcessList.txt" -Width 200

Format-List

Format-List muestra los datos de manera vertical, con una propiedad por línea. Úselo cuando tenga muchas propiedades o campos con valores extensos, para evitar la truncación de dichos valores. Este formato es adecuado para informes y registros detallados.

Aquí hay un ejemplo de uso de Format-List con Out-File:

Get-Process | Format-List -Property Name, ID, CPU, StartTime | Out-File -FilePath "DetailedProcessList.txt"

Al igual que con Format-Table, seleccione solo las propiedades que necesite.

Evite conflictos de archivos con Test-Path para verificar si los archivos existen antes de escribir

Siempre es prudente verificar si un archivo existe antes de intentar escribir en él. De esta manera, puedes evitar sobrescrituras accidentales y decidir qué hacer cuando un archivo ya existe. El cmdlet Test-Path en PowerShell te permite comprobar la existencia de un archivo.

A continuación se presentan los pasos que debe seguir:

  1. Asigne la ruta del archivo a una variable.
  2. Utilice el cmdlet Test-Path para verificar si el archivo existe.
  3. Decida si desea agregar, sobrescribir, renombrar o saltar la escritura.
  4. Utilice el cmdlet Out-File para crear o escribir en el archivo.

Errores comunes y soluciones

El cmdlet Out-File en PowerShell a veces puede llevar a errores comunes, especialmente en lo que respecta al manejo de archivos, codificación y agregado de contenido. Algunos problemas comunes y sus soluciones se discuten a continuación.

Evite la pérdida de datos por sobrescritura

De forma predeterminada, el cmdlet Out-File sobrescribe el contenido de un archivo existente sin advertencia, si ya existe un archivo con el mismo nombre. Algunas formas de evitar esto son:

  • Añada la salida al archivo existente en lugar de sobrescribirlo utilizando el parámetro -Append.
  • Compruebe si el archivo existe con Test-Path y decida cómo desea proceder con Out-File.

Evite la pérdida de datos por codificación inadecuada

Por defecto, Out-File utiliza codificación Unicode en PowerShell 5.1 y versiones anteriores. Utiliza codificación UTF-8 en PowerShell Core y versiones posteriores.

La codificación predeterminada puede no ser compatible con su sistema o aplicaciones que esperan una codificación diferente. Por lo tanto, debe especificar la codificación explícitamente utilizando el parámetro -Encoding.

Gestione la salida en scripts de larga ejecución para asegurar el rendimiento

En entornos restringidos como PowerShell ISE, ejecutar scripts con el cmdlet Out-File puede llevar a problemas tales como:

  • Fallo al manejar estructuras de datos complejas como se esperaba
  • Truncamiento de salidas extensas

Para gestionar salidas largas, puedes:

  • Utilice el parámetro -Width para establecer un ancho adecuado
  • Exporte datos complejos a formatos estructurados como CSV o JSON utilizando los cmdlets Export-Csv o ConvertTo-Json

Maneje el registro y el manejo de errores en scripts de PowerShell

A veces, un archivo está en uso o bloqueado por otro proceso. En este caso, el cmdlet Out-File generará un error ya que no podrá escribir en él. Puedes manejar este y otros errores con un bloque try/catch. Un ejemplo es el siguiente:

      $content = "Write content to file"
$filePath = "C:\Temp\Errors.txt"
try {
$content | Out-File -FilePath $filePath
Write-Host "File written successfully."
} catch {
Write-Host "File is in use or locked by another process."
}
      

FAQ

Compartir en

Aprende más

Acerca del autor

Asset Not Found

Tyler Reese

VP de Gestión de Producto, CISSP

Con más de dos décadas en la industria de la seguridad de software, Tyler Reese conoce íntimamente los desafíos de identidad y seguridad que evolucionan rápidamente a los que se enfrentan las empresas hoy en día. Actualmente, se desempeña como director de producto para el portafolio de Netwrix Identity and Access Management, donde sus responsabilidades incluyen evaluar tendencias del mercado, establecer la dirección de la línea de productos IAM y, finalmente, satisfacer las necesidades de los usuarios finales. Su experiencia profesional abarca desde la consultoría de IAM para empresas Fortune 500 hasta trabajar como arquitecto empresarial de una gran compañía de venta directa al consumidor. Actualmente posee la certificación CISSP.