Importación de usuarios en powershell desde un excel ( .csv ) o archivo de texto (.txt )
Nota: Es muy aconsejable antes de hacer la lectura de este post, haber comprendido perfectamente el artículo, creación de usuarios con powershell, ya que nos basamos en el para realizar esta operación. La única diferencia es que los datos los recogeremos de variables.
En primer lugar tenemos que tener una hoja de excel o bien un archivo separado por comas.
El formato del archivo tiene que ser delimitado por comas en el caso que sea un archivo de texto o delimitado por los campos de una hoja de excel. En la primera línea, colocaremos los metadatos a rellenar en DA, como si fuese una tabla de una bbdd y ordenados en las lineas de más abajo los datos que rellenaremos según los metadatos de la primera fila:
Metadato1, Metadato2, Metadato3 …
Valor1, Valor2, Valor3 …
Valor1, Valor2, Valor3 …
…etc
Un ejemplo práctico sería el siguiente:
cn,sAMAccountName,FirstName,LastName
Usuario1,usuario.1,Miguel, Martinez
Maria,maria.kill,maria,kill
Para realizar la importación utilizaremos el CMDLET: import-csv
Para esta operación , lo primero que haremos será meter dentro de una variable todo, de manera luego podamos trabajar con ella rápidamente. Vamos a realizarlo de la siguiente forma:
$datos= import-csv “Mis_Usuarios.csv”
Ahora tenemos todo el contenido de la hoja de excel dentro de la variable $datos. Los registros se irán devolviendo uno por uno, como cuando utilizamos un comando de powershell. Así que para realizar la importación y que devuelva todos los datos tendremos que hacer un “loop” con este objetivo, es decir un bucle, sino hacemos esto sólo nos devoverá la primera línea.
En powershell esto se hace con un “foreach” realmente es muy sencillo no te preocpes.
Quedémonos con esto:
foreach($CadaRegistro en $datos) {
Haz lo que sea
}
Diremos que este bucle realiza lo siguiente: Por cada registro que devuelva la variable $datos, es decir, cada registro de la hoja de excel, haces lo que sea, aquí colocaremos las sentencias para introducir el registro que se nos ha devuelto el foreach dentro del AD.
Para referirse a un campo concreto utilizaremos como siempre variable.propiedad ,es decir, si por ejemplo queremos extraer los CNs de la hoja de excel o del archivo de texto, utilizaremos $CadaRegistro.CN y nos devolverá todos los CN de la hoja de excel porque está dentro de un bucle “foreach”. Si lo hacemos sin el bucle sólo nos devolverá el CN del primer registro.
Haremos un ejemplo rápido:
PS C:\> foreach($CadaREgistro in $datos){write-host $CadaRegistro.cn}
Usuario1
Maria
Queremos ahora que nos devuelva el LastName, pues utilizaremos $CadaRegistro.LastName :
PS C:\> foreach($CadaRegistro in $datos){write-host $CadaRegistro.LastName}
Martinez
kill
Es importante tener en cuenta esto porque lo utilizaremos bastante en el script.
Ahora vamos a meter en una variable el CN ( Common Name )
CNs = $CadaRegistro.CN ( esto mete en la variable CNs el common name )
Conociendo el artículo ( Crear usuarios con Porwershell en DA ) vamos a proceder a crear el objeto USER oséa un CN solo utilizando el primer registro ( Ya que no utilzamos un bucle ).
Hemos creado la siguiente variable: CNs = $CadaRegistro.CN , esto almacena en la variable CNs el CN ( Common Name ) del primer registro de la hoja de excel, bien, pues utilizaremos el método “create” del ojeto ADSI para introducir este valor:
$objUser=$objOU.Create(“user”,”CN=”+$CNs)
Bien, espero que hayas entendido esto porque ahora vamos a proceder a realizar el script de importación, ten en cuenta como vamos a meter los datos dentro del script, vamos a realizarlo utilizando variables, estas serán cada uno de los valores de la hoja. Crearemos una variable por cada valor de cada una de las líneas:
Ejemplo lógico:
Metadato1, Metadato2, Metadato3 …
Valor1(Variable1), Valor2(Variable2), (Variable3)Valor3 …
Archivo
cn,sAMAccountName,FirstName,LastName
Usuario1,usuario.1,Miguel, Martinez
Maria,maria.kill,maria,kill
Variables
$cn=$CadaRegistro.cn, $sAMAccountName=$CadaRegistro. sAMAccountName, $FirstName=$CadaRegistro. FirstName …
—————————————————————————————————
Script:
# Creamos el objeto ADSI ( Realizando una consulta ) y lo metemos dentro de la varialbe objOU para utilizarlo:
$objOU=[ADSI]“LDAP://OU=People,DC=dominio,DC=priv”
# Metemos el objeto archivo a importar dentro de la variable: $CadaRegistro
$datos=import-csv “Mis_Usuarios.csv”
# Creamos el bucle y las variables para utilizar como hemos ejemplificado:
foreach($CadaRegistro in $datos) {
#Mapeamos las variables como hemos exlicado:
$cn=$CadaRegistro.cn
$sAMAccountName=$CadaRegistro.sAMAccountName
$givenName=$CadaRegistro.FirstName
$sn=$CadaRegistro.LastName
$displayName=$sn + “, ” + $givenName
$userPrincipalName=$givenName + “.” + $sn + “@dominio.priv”
#Creamos el usuario en el DA
$objUser=$objOU.Create(“user”,”CN=”+$cn)
$objUser.Put(“sAMAccountName”,$sAMAccountName)
$objUser.Put(“userPrincipalName”,$userPrincipalName)
$objUser.Put(“displayName”,$displayName)
$objUser.Put(“givenName”,$givenName)
$objUser.Put(“sn”,$sn)
$objUser.SetInfo()
# Habilitamos el usuario y cambiamos la contraseña
$objUser.SetPassword(“Carpintro1″)
$objUser.psbase.InvokeSet(“AccountDisabled”,$false)
$objUser.SetInfo()
}
—————————————————————————————————
IvanZito


