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.


