es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PowerShell, cómo combinar dos conjuntos de datos no relacionados en un arreglo o un archivo CSV.

Estoy intentando escribir un script simple de PowerShell para obtener datos de software y servicios de una máquina. Por lo tanto, estoy tratando de encontrar la mejor manera de consolidar los datos en un archivo CVS en lugar de dos archivos CVS separados. Quería usar el código siguiente, pero sería más eficiente en términos de tiempo combinar ambos conjuntos de datos.

Get-Services | Select StartType, Status, Name, DisplayName |
Export-CSV -path $servicescsv

Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall* |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | 
Export-CSV -path $softwarecsv

Por lo tanto, lo anterior es probablemente bastante simple, pero podría simplemente crear dos matrices para el software y los servicios. Sin embargo, ¿cuál es el mejor método para combinar las dos matrices sin sobrescribirse entre sí? Sé que uno de los problemas es que el nombre de visualización (DisplayName) para el software conflige con el nombre de visualización para los servicios. Por lo tanto, en este momento, $array3 = $services + $software solo agrega el nombre de visualización del software a la matriz, pero las otras columnas se pierden.

¿Cuál es el enfoque más adecuado para este problema?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en PowerShell, auditoría y administración de sistemas, te recomendaría utilizar el cmdlet “Join-Object” en PowerShell para combinar dos archivos CSV separados en uno solo, sin perder ninguna columna.

    Puedes comenzar creando dos variables separadas para tus archivos CSV:

    $services = Import-Csv -Path $servicescsv
    $software = Import-Csv -Path $softwarecsv
    

    A continuación, puedes usar “Join-Object” para combinar las dos variables en una sola, basándote en el campo DisplayName:

    $combined = Join-Object -Left $services -Right $software -LeftJoinProperty DisplayName -RightJoinProperty DisplayName
    

    “Join-Object” unirá las dos variables en función de su propiedad DisplayName y creará un nuevo objeto con todas las columnas de ambas variables.

    Por último, puedes exportar los datos combinados a un archivo CSV:

    $combined | Export-Csv -Path "combined.csv" -NoTypeInformation
    

    Este enfoque te permitirá consolidar ambos conjuntos de datos en un solo archivo CSV, sin perder ninguna información. Además, se puede adaptar fácilmente para incluir propiedades o variables adicionales según sea necesario.

Comments are closed.