En la serie de PowerShell, estamos viendo cómo trabajar con archivos en PowerShell. Los primeros tipos de archivos que estamos cubriendo que se utilizan son los tipos de archivos CSV (valores separados por comas). Vamos a ver en dos importantes cmdlets import-csv/export-csv que son ampliamente utilizados mientras se trabaja con CSV.
Empezamos con la extensión de archivo CSV, ya que es la más básica. Haremos uso del ejemplo anterior, en el que almacenamos los procesos que se están ejecutando actualmente en el archivo:
#Defining file for export$exportedFile = 'C:\temp\exportedProcesses.csv'#Exporting as CSV - basicGet-Process | Export-Csv $exportedFile#Opening the filepsedit $exportedFile
Por defecto, Export-Csv escribirá un archivo delimitado por comas utilizando la codificación ASCII y sobrescribirá completamente cualquier archivo que utilice el mismo nombre.
Export-Csv puede utilizarse para añadir líneas a un archivo existente utilizando el parámetro Append. Cuando se utiliza el parámetro Append, el objeto de entrada debe tener cada uno de los campos enumerados en la cabecera del CSV o se lanzará un error a menos que se utilice el parámetro Force.
Después de ejecutar este sencillo ejemplo, tendrá delante el archivo CSV abierto, que consta de todos los procesos y cada valor, separados por comas. Y es que CSV significa en realidad valores separados por comas. La ventaja de trabajar con archivos CSV es que obtendrá objetos personalizados en forma de tabla, que pueden filtrarse fácilmente. Este tipo de archivo tiene sentido, especialmente para los objetos de datos simples.
Export-Csv puede ser instruido para excluir esta cabecera utilizando el parámetro NoTypeInformation:
Get-Process | Export-Csv processes.csv -NoTypeInformation
La importación es muy sencilla.
#Importing CSV file$data = Import-Csv $exportedFile#Showing content$data | Out-GridView
Los archivos de valores separados por comas (CSV) son texto plano. Aplicaciones como Microsoft Excel pueden trabajar con archivos CSV sin cambiar el formato del archivo, aunque las características avanzadas que tiene Excel no se pueden guardar en un archivo CSV.
Por defecto, Import-Csv espera que la entrada tenga una fila de cabecera, que esté delimitada por comas y que utilice la codificación de archivos ASCII. Si alguno de estos elementos es diferente, se pueden utilizar los parámetros del comando. Por ejemplo, se puede establecer un tabulador como delimitador.
Import-Csv TabDelimitedFile.tsv -Delimiter `t
Una marca seguida de t (`t) se utiliza para representar el carácter de tabulación en PowerShell.
Los datos importados mediante Import-Csv siempre se formatearán como una cadena. Si se utiliza Import-Csv para leer un archivo que contiene el siguiente texto, cada uno de los números se tratará como una cadena.
#Showing its type$data | Get-Member # TypeName: CSV:System.Diagnostics.Process$data.GetType() # PSCustomObject$data.GetType() # System.Array
Es interesante ver aquí qué tipo se está recuperando después de importar el archivo CSV. El cmdlet Get-Member sobre el propio objeto $data muestra que se trata de un archivo CSV, y los objetos exportados son de tipo System.Diagnostics.Process. Pero, después de echar un vistazo dedicado al primer objeto y al tipo del contenedor, reconocerá que el objeto importado ya no se puede utilizar como un proceso. Se ha convertido en un PSCustomObject. No obstante, sigue siendo una mejora respecto a exportarlo como una cadena simple. Puedes importarlo fácilmente y utilizarlo como un simple almacén de datos.
La siguiente gran ventaja al trabajar con archivos CSV es que puedes hacerlos editables con Microsoft Excel. Para ello, sólo tiene que cambiar el delimitador de la coma (,) al punto y coma (;), ya que éste es el delimitador por defecto de los archivos de Excel. Puede utilizar la bandera dedicada -Delimiter para esta tarea.
#Exporting as CSV with specified delimiter ';'Get-Process | Export-Csv C:\temp\exportedProcesses.csv -Delimiter ';'#Importing the data$data = Import-Csv C:\temp\exportedProcesses.csv -Delimiter ';'#Showing the data$data | Out-GridView
Tenga cuidado aquí, ya que este es un comportamiento específico de la cultura. Para evitar los problemas con las diferentes culturas, puede utilizar la bandera -UseCulture.
Ahora, la edición con Excel es posible. Para demostrar la potencia de PowerShell, ahora abriremos el archivo con Excel a través de PowerShell y el uso del ComObject del propio Excel.
#Create ComObject for Excel$excel = New-Object -ComObject Excel.Application#Make it visible$excel.Visible = $true#Open the CSV file$excel.Workbooks.Open($exportedFile)
Puedes intentar abrir un archivo CSV que fue exportado con la coma y el delimitador punto y coma para ver la diferencia entre los dos enfoques por ti mismo.
Conclusión:
Ya hemos cubierto una sección para entender el trabajo con CSV. Cubrimos los cmdlets export-csv al tratar de exportar archivos como CSV. Se utilizan sobre todo, mientras que la presentación de informes que se pueden ver directamente con Excel. Personalmente he utilizado Export-CSV y import-CSV mientras se trabaja con la plataforma azure que vamos a cubrir algunos otros días en detalle.