Búsqueda de sitios web

PowerShell: ¿Cómo exportar una matriz a un archivo CSV?


PowerShell es un lenguaje de scripting versátil y un shell de línea de comandos que proporciona potentes capacidades de automatización y gestión. Como usuario de PowerShell, es posible que se haya encontrado en una situación en la que necesite exportar una matriz a un archivo CSV. En esta publicación de blog, exploraremos cómo exportar una matriz a un archivo CSV (valores separados por comas) usando PowerShell. Los archivos CSV se utilizan ampliamente para el intercambio de datos entre aplicaciones y plataformas debido a su simplicidad y compatibilidad. Al final de esta publicación, comprenderá cómo exportar una matriz a un archivo CSV utilizando varias técnicas.

Comprensión de matrices y archivos CSV en PowerShell

Los arreglos son colecciones de elementos que se almacenan en una sola variable. Se puede acceder a cada elemento de una matriz mediante un número de índice. Las matrices se usan comúnmente para almacenar datos en PowerShell porque le permiten agrupar datos relacionados y manipularlos como una sola entidad.

Una matriz es una colección de elementos almacenados en una única variable. Aquí hay un ejemplo de cómo crear una matriz simple:


$Array = @(1, 2, 3, 4, 5)

Los archivos CSV son archivos de texto sin formato que almacenan datos tabulares en un formato estructurado. Cada fila de un archivo CSV representa un registro y cada columna representa un campo de ese registro. Los archivos CSV se utilizan comúnmente para intercambiar datos entre diferentes aplicaciones y bases de datos.

Hay varias formas de exportar una matriz a un archivo CSV en PowerShell. En esta publicación, cubriremos tres métodos: el cmdlet Export-Csv, Add-Content con un bucle ForEach y Out-File con un bucle ForEach.

Método 1: uso del cmdlet Export-Csv

El cmdlet Export-Csv es el método más sencillo para exportar una matriz a un archivo CSV. Este cmdlet exporta objetos a un archivo CSV y los convierte en una serie de valores separados por comas. He aquí un ejemplo:


$array = @(1, 2, 3, 4, 5)
$array | Export-Csv -Path "ArrayExport.csv" -NoTypeInformation

Sin embargo, este método no funcionará como se esperaba con matrices simples.

Para usar el cmdlet Export-Csv, debemos ingresarle un objeto. A continuación se explica cómo hacerlo:


$array = @(1, 2, 3, 4, 5)
$arrayObjects = $array | ForEach-Object { 
     [PSCustomObject]@{'Value' = $_} 
}
$arrayObjects | Export-Csv -Path "C:\Temp\ArrayExport.csv" -NoTypeInformation

De manera similar, si exporta una matriz de cadenas usando PowerShell, ¡el CSV solo mostrará la longitud!


#String Array
$Array = @("apple", "orange", "banana", "kiwi")

#Export array to CSV
$Array | Export-CSV -Path "C:\Temp\Array.csv" -NoTypeInformation

Producción :


"Length"
"5"
"6"
"6"
"4"

Esto se debe a que el cmdlet Export-Csv toma objetos como entradas y exporta una tabla de propiedades de objetos y sus valores. Dado que su secuencia de comandos produce objetos de cadena y la única propiedad que tienen es la longitud, eso es lo que tiene. Entonces, para superar este problema, tenemos que usar el cmdlet "Select-Object", que devuelve un PSObject personalizado.


#String Array
$Array = @("apple", "orange", "banana", "kiwi")

#Convert Array to Object Array - using Select-Object cmdlet
$ObjArray = $Array | Select-Object @{Name='Name';Expression={$_}}

#Export Object Array to 
$ObjArray | Export-Csv "C:\Temp\ArrayExport.csv" -NoTypeInformation

Exportar una matriz a CSV usando PowerShell

En este ejemplo, estamos creando una matriz llamada $Array que contiene tres objetos. Cada objeto tiene tres propiedades: nombre, edad y ciudad (similar a la matriz multidimensional). Usamos la clase PSCustomObject para crear objetos personalizados con propiedades. Una vez que tenga una matriz, puede exportarla a un archivo CSV usando el cmdlet Export-Csv. A continuación se muestra un ejemplo de cómo exportar la matriz $Array a un archivo CSV llamado data.csv en la carpeta “C:\Temp”:


#Define Array
$Array = @( [PSCustomObject]@{ Name = "John"; Age = 30; City = "New York" }, 
            [PSCustomObject]@{ Name = "Jane"; Age = 25; City = "Los Angeles" }, 
            [PSCustomObject]@{ Name = "Bob"; Age = 40; City = "Chicago" }
         )

#Export array to CSV
$Array | Export-Csv -Path "C:\Temp\data.csv" -NoTypeInformation

En este ejemplo, estamos canalizando la matriz $Array al cmdlet Export-Csv. El parámetro -Path especifica la ruta y el nombre del archivo CSV. El parámetro -NoTypeInformation evita que PowerShell agregue un encabezado de información de tipo al archivo CSV. El script se ejecuta y crea un nuevo archivo llamado Data.csv en el directorio “C:\Temp”, que contiene los datos de la matriz en formato CSV.

Exportación de matrices con columnas específicas

Si tiene una matriz con muchas columnas y solo desea exportar un subconjunto de esas columnas, puede usar el cmdlet Select-Object. Por ejemplo, si tiene una matriz con cinco columnas y solo desea exportar las primeras tres columnas, puede usar el siguiente comando:


$Array | Select-Object Column1, Column2, Column3 | Export-Csv -Path "data.csv" -NoTypeInformation

Exportar múltiples matrices a CSV desde PowerShell

Para exportar varias matrices a un único archivo CSV también se requiere el cmdlet Export-CSV. Realizamos esta tarea concatenando el contenido de la matriz usando el símbolo + (más). Aquí hay un ejemplo:


#Define Arrays
$Array1 = @(1,2,3,4)
$Array2 = @(5,6,7,8)
$Array3 = $Array1 + $Array2

$ResultArray = @()
#Convert Array to object
ForEach ($Item in $Array3)
{
    $ResultArray+=[pscustomobject]@{Result = $item }
}

#Export Array to CSV
$ResultArray | Export-Csv -Path "C:\Temp\Array.csv" -NoTypeInformation

En este ejemplo, estamos creando dos matrices ($array1, $array2), fusionándolas en $Array3 y exportando la matriz combinada resultante a un archivo CSV.

Método 2: usar Agregar contenido con un bucle ForEach

Otra forma de exportar una matriz a un archivo CSV es utilizar el cmdlet Add-Content en combinación con un bucle ForEach. Este método le permite crear un archivo nuevo o agregar datos a un archivo existente. He aquí un ejemplo:


#Define Array
$Array = @(1, 2, 3, 4, 5)
$CSVFile  = "C:\Temp\ArrayExport.csv"

#Remove the CSV if exists
If (Test-Path -Path $CSVFile) { Remove-Item -Path $CSVFile -Force}

#Set Header
$Header = "Value"
#Add Header to the CSV file
Add-Content -Path $CSVFile -Value $Header

#Add content to the CSV
ForEach ($Item in $Array) {
    Add-Content -Path $CSVFile -Value $Item
}

Tenga en cuenta que estamos comprobando si el archivo CSV existe y eliminándolo. Esto se debe a que el cmdlet Add-Content se agrega al archivo existente de forma predeterminada.

Método 3: usar Out-File con un bucle ForEach

Out-File es otro cmdlet que se puede utilizar para exportar una matriz a un archivo CSV. Este cmdlet envía la salida a un archivo en lugar de a la consola. He aquí un ejemplo:


$array = @(1, 2, 3, 4, 5)
$header = "Value"
$header | Out-File -FilePath "C:\Temp\ArrayExport.csv"
ForEach ($item in $array) {
    $item | Out-File -FilePath "C:\Temp\ArrayExport.csv" -Append
}

Conclusión

En esta publicación de blog, cubrimos tres métodos para exportar una matriz a un archivo CSV en PowerShell: el cmdlet Export-Csv, Add-Content con un bucle ForEach y Out-File con un bucle ForEach. Cada método tiene sus ventajas y puedes utilizar el más adecuado a tus necesidades.

Artículos relacionados