{"id":775092,"date":"2026-03-25T19:35:06","date_gmt":"2026-03-25T19:35:06","guid":{"rendered":"https:\/\/www.ninjaone.com\/?post_type=script_hub&#038;p=775092"},"modified":"2026-03-25T19:35:06","modified_gmt":"2026-03-25T19:35:06","slug":"como-importar-usuarios-active-directory-csv","status":"publish","type":"script_hub","link":"https:\/\/www.ninjaone.com\/es\/script-hub\/como-importar-usuarios-active-directory-csv\/","title":{"rendered":"\u00bfC\u00f3mo importar usuarios a Active Directory desde un archivo CSV con PowerShell?"},"content":{"rendered":"<p>Uno de los usos m\u00e1s habituales de PowerShell en TI profesional es sincronizar informaci\u00f3n con Active Directory (AD). Parece que todo el mundo tiene alguna fuente de datos externa que se corresponde con empleados que necesitan incorporarse a AD. Esto es l\u00f3gico, ya que AD suele ser el servicio m\u00e1s utilizado en una organizaci\u00f3n y no solo ofrece una excelente funcionalidad de autenticaci\u00f3n, sino que tambi\u00e9n act\u00faa como repositorio de informaci\u00f3n de empleados.<\/p>\n<p>Tanto si tus datos est\u00e1n en una base de datos SQL personalizada como en un sofisticado sistema de RR. HH., resulta poco pr\u00e1ctico tener que consultar varias fuentes cuando necesitas informaci\u00f3n como el departamento del empleado, los grupos a los que debe pertenecer, etc. Cuando empiezas a sincronizar esos datos, el sistema de origen puede cambiar su esquema, modificar APIs o servidores, lo que implica rehacer el c\u00f3digo. Para asegurarte de que la fuente de datos desde la que sincronizas se mantiene estable y puede generarse f\u00e1cilmente desde diferentes sistemas, es buena idea exportar esos datos a un archivo CSV.<\/p>\n<p>Un archivo CSV sencillo puede exportarse desde pr\u00e1cticamente cualquier software o base de datos y, en este formato, permite al administrador ajustar los datos seg\u00fan sea necesario sin tener que depender de otro equipo para modificar una base de datos.<\/p>\n<p><!--more--><\/p>\n<p>Vamos a ver un script sencillo que puedes usar hoy mismo para comprobar c\u00f3mo sincronizar un atributo desde un CSV a una cuenta de AD.<\/p>\n<p>Para situarnos, supongamos que tenemos un CSV llamado C:\\Employees.csv. Este CSV tiene tres columnas: Nombre, Apellidos y Departamento. Necesitas un script que encuentre la cuenta de AD asociada a ese nombre y apellidos, y despu\u00e9s actualice el departamento seg\u00fan lo que figure en el CSV.<\/p>\n<p>Este script, como cualquier script de sincronizaci\u00f3n, constar\u00e1 principalmente de tres fases. Estas fases son: leer los datos de origen (el CSV en este caso), encontrar el identificador \u00fanico en el sistema de destino que coincida con los datos de origen (en este caso, sAMAccountName en AD) y, por \u00faltimo, escribir los atributos asociados en esa cuenta.<\/p>\n<p>La primera tarea es leer el archivo CSV.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">$csvUsers = Import-Csv -Path 'C:Employees.csv'<\/pre>\n<p>Hecho. El siguiente paso es encontrar el identificador \u00fanico para cada fila del CSV. Como no tenemos ese identificador \u00fanico dentro del CSV, tendremos que generarlo sobre la marcha. Para generar ese identificador \u00fanico, vamos a asumir que la inicial del nombre y el apellido del empleado siempre formar\u00e1n su sAMAccountName en AD. Tendremos que crear ese sAMAccountName y despu\u00e9s lanzar una consulta en AD para comprobar si la cuenta existe.<br \/>\nNota: Antes de seguir, aseg\u00farate de haber descargado e instalado las <a href=\"https:\/\/learn.microsoft.com\/en-us\/troubleshoot\/windows-server\/system-management-components\/remote-server-administration-tools\" target=\"_blank\" rel=\"noopener\">Remote Server Administration Tools<\/a> para tu sistema operativo. Esto te dar\u00e1 acceso al m\u00f3dulo de PowerShell para Active Directory, que contiene los cmdlets Get-ADUser y Set-ADUser que vamos a utilizar.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">foreach ($csvUser in $csvUsers) {\r\n    $userName = '{0}{1}' -f $csvUser.FirstName.SubString(0,1),$csvUser.LastName\r\n    if ($adUser = Get-AdUser -Filter \"samAccountName -eq $userName\" -Properties $attributesToSync) {\r\n        ## Se ha encontrado nuestro \u201cidentificador \u00fanico\u201d. Procede a leer los datos del CSV y escribir los atributos correspondientes.  \r\n    } else {\r\n        Write-Warning -Message 'No se encontr\u00f3 ninguna coincidencia de usuario'\r\n    }\r\n}<\/pre>\n<p>Una vez que tenemos una cuenta de AD con la que trabajar, podemos leer cada atributo asociado a ese empleado en el archivo CSV y escribir esa informaci\u00f3n en la cuenta de AD encontrada. Observa a continuaci\u00f3n que estoy definiendo la variable $attributesToSync y ley\u00e9ndola m\u00e1s adelante. He hecho esto para poder a\u00f1adir atributos adicionales que puedan estar en el CSV y sincronizarlos tambi\u00e9n en el futuro. El siguiente ejemplo primero comprueba si el atributo es el mismo. Si no lo es, utiliza Set-ADUser para modificarlo.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">$attributesToSync = 'Department'\r\nforeach ($csvUser in $csvUsers) {\r\n    $userName = '{0}{1}' -f $csvUser.FirstName.SubString(0,1),$csvUser.LastName\r\n    if ($adUser = Get-AdUser -Filter \"samAccountName -eq $userName\" -Properties $attributesToSync) {\r\n        foreach ($attr in $attributesToSync) {\r\n            if ($csvUser.$_ -ne $adUser.$_) {\r\n                $setParams = @{$_ = $csvUser.$_}\r\n                $adUser | Set-AdUser @setParams\r\n            }\r\n        }\r\n    } else {\r\n        Write-Warning -Message \"No se encontr\u00f3 ninguna coincidencia de usuario\"\r\n    }\r\n}<\/pre>\n<p>Este ejemplo solo funcionar\u00e1 con atributos que sean valores de tipo cadena en AD. Ten cuidado con atributos como el responsable (manager), la fecha de expiraci\u00f3n de la cuenta, etc. Estos atributos requieren un objeto del tipo correcto antes de poder escribirse en AD. Har\u00eda falta otra serie de art\u00edculos para profundizar en los detalles de la sincronizaci\u00f3n con AD y el trabajo con distintos atributos, pero he creado un m\u00f3dulo de PowerShell llamado PSADSync que te ayudar\u00e1 con esto. Puedes encontrarlo en la PowerShell Gallery con el <a href=\"https:\/\/www.powershellgallery.com\/packages\/PSADSync\/1.2.88\" target=\"_blank\" rel=\"noopener\">m\u00f3dulo Install-Module PSADSync<\/a>.<\/p>\n<p><em>Adam Bertram es MVP de Microsoft Windows Cloud y Datacenter Management, autor de varios cursos de formaci\u00f3n, colaborador habitual de numerosas publicaciones impresas y en l\u00ednea y ponente en diversos grupos de usuarios y conferencias. Puedes encontrar a Adam en <a href=\"https:\/\/adamtheautomator.com\/\" target=\"_blank\" rel=\"noopener\">adamtheautomator.com<\/a> o en Twitter en @adbertram.<\/em><\/p>\n","protected":false},"author":9,"featured_media":0,"parent":0,"menu_order":535,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","_lmt_disableupdate":"no","_lmt_disable":""},"operating_system":[4212],"use_cases":[4267],"class_list":["post-775092","script_hub","type-script_hub","status-publish","hentry","script_hub_category-windows"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/script_hub\/775092","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/script_hub"}],"about":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/types\/script_hub"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/comments?post=775092"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/media?parent=775092"}],"wp:term":[{"taxonomy":"script_hub_category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/operating_system?post=775092"},{"taxonomy":"use_cases","embeddable":true,"href":"https:\/\/www.ninjaone.com\/es\/wp-json\/wp\/v2\/use_cases?post=775092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}