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.

¿Cómo encuentro un usuario por DisplayName en un archivo CSV dado un DistinguishedName en otro archivo CSV?

Tengo dos archivos CSV con valores separados por tabuladores.

CSV1:
csv
GivenName Surname DisplayName Manager
John Smith John Smith Oliver Twist

CSV2:
csv
SAMAccountName mail DistinguishedName
John Smith johns@example.com CN=John Smith,CN=Users,DC=example,DC=com
Oliver Twist olivert@example.com CN=Oliver Twist,CN=Users,DC=example,DC=com

Lo que quería hacer es comparar el CSV1 con el CSV2 y hacer coincidir el nombre del administrador en la columna “Manager” en el archivo CSV1 con el valor de la columna “DistinguishedName” del CSV2 (es decir, “”CN = Oliver Twist ” “) como en este ejemplo y exportar a un nuevo archivo CSV como este:

csv
SAMAccountName mail Manager
John Smith johns@example.com Oliver Twist

Puede haber cientos de nombres distinguidos en el archivo CSV2 como se menciona y todo lo que quiero es la salida de comparar y hacer coincidir el valor de la columna “DistinguishedName” “”CN = cualquier nombre -y “con la columna “Manager” en CSV1.

Aquí está el script que intenté:

$csv1 = Import-Csv -Path 'C:temp\AD.csv'
$csv2 = Import-Csv -Path 'C:\temp\AD_ExportDN.csv'

$csv3 = foreach ($record in $csv2) {
    $matchingRecord = $csv1 | Where-Object { $_.manager -eq $record.manager }
    # if your goal is to ONLY export records with a matching email address,
    # uncomment the if ($matchingRecord) condition

#if ($matchingRecord) {
    $record | Select-Object *, @{Name = 'manager'; Expression = {$matchingRecord.DistinguishedName}}
#}

}

$csv3 | Export-Csv -NoTypeInformation -Force -Path 'C:\temp\mergedforAD2.csv'
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para lograr la salida deseada, es necesario comparar la columna Manager en CSV1 con la columna DistinguishedName en CSV2 y crear un nuevo archivo CSV con los registros coincidentes. Aquí está el script de PowerShell actualizado:

    $csv1 = Import-Csv -Path 'CSV1.csv' -Delimiter "`t"
    $csv2 = Import-Csv -Path 'CSV2.csv' -Delimiter "`t"
    $output = @()
    
    foreach ($record in $csv1) {
        $managerName = $record.Manager
        $matchingRecord = $csv2 | Where-Object { $_.DistinguishedName -like "*$managerName*" }
    
        if ($matchingRecord) {
            $outputRecord = [PSCustomObject]@{
                'SAMAccountName' = $matchingRecord.SAMAccountName
                'mail' = $matchingRecord.mail
                'Manager' = $matchingRecord.DistinguishedName
            }
    
            $output += $outputRecord
        }
    }
    
    $output | Export-Csv -NoTypeInformation -Force -Path 'output.csv' -Delimiter "`t"
    

    En este script, primero importamos los dos archivos CSV usando el cmdlet Import-Csv con el delimitador correcto especificado (-Delimiter "t”). Luego, recorremos cada registro en CSV1 y extraemos el nombre deManager. Luego buscamos un registro coincidente en CSV2 usando el cmdletWhere-Objecty el operador-likepara buscar el nombre deManagerdentro del valor deDistinguishedName`.

    Si se encuentra un registro coincidente, creamos un nuevo objeto con las columnas deseadas (SAMAccountName, mail y Manager) y lo agregamos al arreglo $output. Finalmente, exportamos el arreglo $output a un nuevo archivo CSV usando el cmdlet Export-Csv con el delimitador correcto y la bandera -NoTypeInformation.

Comments are closed.