Uso del cmdlet Out-File para redirigir la salida a un archivo en PowerShell – TrucosInformaticos

Powershell

PowerShell se trata de objetos. En la mayoría de los casos, muestra la salida en la pantalla o la almacena en una variable. Pero en algunos casos, redirigir la salida a un archivo de texto tiene más sentido, como cuando se exporta información o se escribe un archivo de registro.

PowerShell tiene un cmdlet llamado Out-File que le permite redirigir la salida a un archivo de texto. Si está familiarizado con los redirectores > y >> en la mayoría de las terminales, entonces Out-File no le resultará demasiado extraño.

En este blog, exploraremos cómo usar el cmdlet Out-File, sus diferentes parámetros y algunos ejemplos para ayudarlo a comenzar.

La sintaxis del archivo de salida de PowerShell

Primero, familiaricémonos con la sintaxis de Out-File. Para mostrar su sintaxis, ejecute el siguiente comando en PowerShell.

Get-Command Out-File -Syntax

La sintaxis básica del cmdlet Out-File es la siguiente:

Como puede ver, Out-File tiene dos conjuntos de parámetros. La única diferencia es que no puede usar los parámetros FilePath y LiteralPath en un solo comando. A continuación se presenta la explicación de cada parámetro para una mejor comprensión.

  • FilePath (obligatorio): especifica la ruta y el nombre de archivo del archivo al que se envía la salida. Se permiten comodines en la ruta. El archivo de destino se crea si no existe.
  • LiteralPath (obligatorio): especifica la camino literal y nombre de archivo del archivo al que se envía la salida. Los comodines son no permitido en la ruta, pero las expresiones/variables sí. El archivo de destino se crea si no existe.
  • InputObject (opcional): especifica el objeto que se envía al archivo. Puede ser una variable, un comando o un bloque de script.
  • Agregar (opcional): agrega la salida al final de un archivo existente. Si el archivo no existe, se crea un nuevo archivo. este parámetro
  • Codificación (opcional): especifica la codificación de caracteres utilizada en el archivo de salida. Unicode predeterminado en Windows PowerShell y utf8NoBom en PowerShell 7+.
  • NoClobber (opcional): evita que el cmdlet sobrescriba un archivo existente.
  • Forzar (opcional): permite que el cmdlet sobrescriba archivos de solo lectura.
  • WhatIf (opcional): muestra lo que sucedería si se ejecuta el cmdlet.
  • Confirmar (opcional): le solicita confirmación antes de ejecutar el cmdlet.

Ejemplos de redirección de salida de PowerShell a archivo

Aquí hay algunos ejemplos de Out-File para ayudarlo a comenzar.

Nota. Aprenda a usar la función Retorno de PowerShell.

Ejemplo 1: salida de tubería de PowerShell a archivo

El uso más común de Out-File es canalizar un objeto hacia él. Por ejemplo, ejecutemos el comando Get-Process para enumerar todos los procesos en ejecución y canalizar el resultado al comando Out-File. El siguiente comando crea el archivo process.txt en el directorio actual.

Get-Process | Out-File -FilePath .\process.txt

Para mostrar el contenido del archivo, ejecute el comando Get-Content a continuación.

Get-Content -Path .\process.txt

salida de redirección de powershell

Ejemplo 2: Forzar la sobrescritura de archivos de solo lectura

De forma predeterminada, Out-File sobrescribirá un archivo si ya existe. Pero no si el archivo es de solo lectura.

Supongamos que tenemos un archivo de solo lectura llamado services.txt.

redirección de powershell a archivo

Si intentamos usar Out-File para sobrescribirlo, fallará. Por ejemplo, el siguiente comando obtiene todos los servicios mediante el comando Get-Service y permite que PowerShell redirija todos los resultados a un archivo.

Get-Service | Out-File -FilePath .\services.txt

Como puede ver a continuación, el comando Out-File falló.

powershell redirigir toda la salida al archivo

Para forzar a Out-File a sobrescribir este archivo, agregue el modificador -Force.

Get-Service | Out-File -FilePath .\services.txt -Force

El resultado a continuación muestra que Out-File pudo escribir sobre el archivo de solo lectura.

salida de tubería powershell a archivo

¿Pero notó el error anterior con Get-Service? ¿Por qué no se escribió en el archivo de salida? Esto se debe a que Out-File solo acepta entradas del flujo de salida. Ignora los flujos de error, advertencia, detallado y depuración.

Ejemplo 3: agregar la salida de PowerShell al archivo en una nueva línea

A veces, querrá que Out-File agregue elementos al archivo existente en lugar de sobrescribirlo. Esto es especialmente útil al crear registros o realizar un seguimiento de los cambios.

Para agregar la salida a un archivo existente, puede usar el modificador -Append. El siguiente ejemplo agregará cada nombre de fruta en la matriz al archivo fruit.txt:

"Apple;", "Banana;", "Orange;", "Avocado;" | ForEach-Object { 
Out-File -InputObject $PSItem ` 
-FilePath .\fruits.txt ` 
-Append 
}

Get-Content -Path .\fruits.txt

"Mango;" | Out-File -FilePath .\fruits.txt -Append

Get-Content -Path .\fruits.txt
  • El primer comando escribió el nombre de cada fruta («Manzana;», «Plátano;», «Naranja;», «Aguacate;») en una nueva línea en fruit.txt.
  • El segundo comando mostró el contenido del archivo en la pantalla.
  • El tercer comando agregó otro nombre de fruta («Mango;») al mismo archivo en una nueva línea.
  • El cuarto comando muestra el contenido del mismo archivo mostrando el elemento adjunto.

redirigir la salida al archivo powershell

Ejemplo 4: agregar la salida de PowerShell al archivo en la misma línea

El comportamiento predeterminado al agregar la salida al archivo es agregar una nueva línea. Si es necesario, también puede agregar la nueva salida al final de la línea en lugar de crear una nueva línea. Esto se puede hacer usando el modificador -NoNewLine.

"Apple;", "Banana;", "Orange;", "Avocado;" | ForEach-Object { 
Out-File -InputObject $PSItem ` 
-FilePath .\fruits.txt ` 
-Append -NoNewline 
}

Get-Content -Path .\fruits.txt

"Mango;" | Out-File -FilePath .\fruits.txt -Append -NoNewline

Get-Content -Path .\fruits.txt

redirigir la salida de powershell al archivo

Ejemplo 5: Salida de script de PowerShell a archivo

Cuando escribe un script de PowerShell, agregar una funcionalidad de registro es una excelente manera de realizar un seguimiento de su salida. También puede ayudar con la depuración de su secuencia de comandos si hay problemas en el camino.

En este ejemplo, agregaremos una función que escribe la salida en un archivo de registro con diferentes categorías.

Function Say { 
[CmdletBinding()] 
param ( 
[Parameter()] 
[ValidateSet( 
'SUCCESS', 
'FAIL', 
'WARNING', 
'ERROR', 
'INFORMATION' 
)] 
[String] 
$LogItemType="SUCCESS" 
, 
[Parameter(Mandatory)] 
[String] 
$Message 
, 
[Parameter(Mandatory)] 
[String] 
$LogFileName 
)

# Compose the log message 
$LogMessage = "$(Get-Date -Format "yyyy-MM-dd hh:mm:sstt (zzzz)"): [$($LogItemType)] $($Message)" 
# Display the log message on screen 
$LogMessage 
# Output the log message to file 
$LogMessage | Out-File -Append -FilePath $LogFileName -Force 
}

Para utilizar esta función, debe especificar los siguientes parámetros.

  • LogFileName: esta es la ruta completa al archivo de registro.
  • LogItemType: especifique el tipo de elemento de registro. Los valores válidos son:
    • ÉXITO
    • FALLAR
    • ADVERTENCIA
    • ERROR
    • INFORMACIÓN
  • Mensaje: el mensaje del elemento de registro.
$LogFileName = ".\log.txt" 
Say -LogItemType WARNING ` 
-Message "This is a warning message" ` 
-LogFileName $LogFileName

salida estándar de PowerShell a archivo

Y si revisa el archivo de registro, contiene el elemento de registro que envió.

powershell redirige la salida al archivo y la consola

Mejores prácticas

Estas son algunas de las mejores prácticas que se deben tener en cuenta al usar el cmdlet Out-File:

Utilice nombres de archivo significativos

Al crear archivos con el cmdlet Out-File, asegúrese de usar nombres de archivo significativos que describan el contenido del archivo. Hacerlo puede facilitar la búsqueda y administración de archivos más adelante.

Usar codificación consistente

Uno de los problemas más comunes es la codificación de archivos. Si está enviando resultados a un archivo que requiere una codificación específica, asegúrese de especificar la codificación mediante el parámetro -Encoding. Si no especifica una codificación, se utilizará la codificación predeterminada, que puede no ser compatible con su archivo.

Asegúrese de tener los permisos correctos

Si está intentando escribir en un archivo y obtiene un error de «permiso denegado», asegúrese de tener permiso para escribir en el archivo. Es posible que deba ejecutar PowerShell como administrador o cambiar los permisos en el archivo.

Ruta correcta del archivo de salida

Asegúrese de verificar dos veces la ruta del archivo antes de ejecutar el cmdlet Out-File. Solo el archivo de salida se puede crear automáticamente; pero si especifica una ruta no válida o la ruta (directorio) no existe, el comando fallará.

Sobrescritura accidental

Además, el comando Out-File sobrescribirá el archivo si ya existe. Una buena manera de evitar sobrescribir accidentalmente un archivo es agregar lógica para probar si el archivo ya existe.

if (Test-Path $filename) { 
Write-Host "$filename already exists." 
} 
else { 
Out-File $filename 
}

O también puede agregar el modificador -NoClobber.

Pruebe sus guiones

Antes de ejecutar sus scripts de PowerShell en un entorno de producción, asegúrese de probarlos en un entorno de desarrollo o prueba. Esto puede ayudarlo a detectar cualquier problema con sus scripts antes de que causen problemas en la producción.

Conclusión

El cmdlet Out-File es una poderosa herramienta para enviar la salida de PowerShell a un archivo. Al comprender sus diferentes parámetros, problemas comunes, casos de uso y mejores prácticas, puede usar este cmdlet para crear y administrar archivos en sus scripts de PowerShell. ¡Feliz guion!

5/5 - (115 votos)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *