Temas etiquetados como: ‘PowerShell’

Importar usuarios a AD con Powershell ( csv y txt )

30 Diciembre, 2009


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

Creación de usuarios en DA con Powershell

29 Diciembre, 2009

Crear usuarios con powershellps Creación de usuarios en DA con Powershell

Primero conecta al directorio activo, para conectar lo que hay que hacer es hacer una consulta que nos coloque en la unidad organizativa donde vamos a trabajar, para crear, por ejemplo un usuarios. Las consultas en powershell se hacen con el objeto ADSI de .NET.
Crearemos el objeto creando una variable con la consulta al AD utilizando una ruta DN de la siguiente manera. El ADSI se mete entre corchetes no es más que el tipo de datos que declaramos .
Con esto se creará el ojeto para ser utilizado ( Al crear un tipo de datos ADSI de Active Directory ) el cual es una variable con una consulta automáticamente se crea el objeto en memoria dentro de la variable y ya está listo para ser utilizado.
Creamos el objeto y nos colocamos dentro de la unidad organizativa: People
$objOU=[ADSI]“LDAP://OU=People,DC=dominio,DC=priv”

Ahora vamos a invocar al método para crear un objeto usuario. Hacemos referencia al médodo “crear” llamándole con la variable.metodo en este caso, la variable ya es el objeto que hemos creado en la linea anterior.

La llamada sería $objUser.create(). Es importante utilizar una ruta RDN ( Relative Domain Name ) ya que estamos colocados dentro de la OU People, esto lo hicimos cuando ya creamos el objeto. Si utilizamos una ruta DN como en el primer caso no podremos utilzarlo.
$objUser=$objOU.Create(“user”,”CN=Natalia Jimenez”)

Para rellenar un atributo, tendremos que hacer referencia al objeto llamando al método “Put” como hemos dicho llamaremos a los métodos en powershell objeto.metodo como el objeto está dentro de la variable, ya podemos utilizarlo de la siguiente manera $variable.put() o bien en el caso prático como veremos a continuación.
El parámetro que se le pasa al método “Put” es (“atributo”,”valor del atributo”). Fijaté en el siguiente punto:
$objUser.Put(“sAMAccountName”,”mary.north”)
Para terminar hacemos un commit de los datos almacenados en la variable.
Para ello utilizaremos el método SetInfo. Recuerda que será variable.metodo():

$objUser.SetInfo()
Algunos atributos más
Hay algunos atributos interesantes que debemos conocer, en todos utilizamos el método “put” para rellenarlos, fíjate que utilizamos en lugar de una cadena de texto ya una variable de manera que definiremos los “string” ( valores a introducir en el atributo ya arriba por medio de variables )
# Variables que vamos utilizar
$samAccountName = “Ivanzito”
$userPrincipalName = “ivanzito”
$diplayname= “Iván Ruiz”
…etc ( así con todas las variables )
# Metodo put
$objUser.put(“sAMAccountName”,$samAccountName)
$objUser.put(“userPrincipalName”,$userPrincipalName)
$objUser.put(“displayName”,$displayName)
$objUser.put(“givenName”,$givenName)
$objUser.put(“sn”,$sn)
$objUser.put(“description”,$description)
$objUser.put(“company”,$company)
$objUser.put(“department”,$department)
$objUser.put(“title”,$title)
$objUser.put(“mail”,$mail)
$objUser.SetInfo()
Para establecer el password lo haremos con:
$objUser.SetPassword(“C0mp!exP@ssw0rd”)
Para realizar una acción sobre el objeto llamaremos al método invokepsbas.invokeSet() con los valores “AcountDisabled” y $False en este caso para habilitar el usuario ya que este se crea deshabilitado.
$objUser.psbase.InvokeSet(“AccountDisabled”,$false)
$objUser.SetInfo()
Aquí te dejo un ejemplo que funciona perfecto, es muy imporate un concepto para que funcione. Tienes primero que crear el usuario y luego habilitar la cuenta y cambiar la contraseña. Si no se ha creado el objeto antes, no puedes realizar las dos últimas acciones:
—————————————————————————————————
# Aquí tienes un ejemplo muy sencillo
# Recuerda que tienes que cambiar la ruta DN en la primera línea
# Cambia el nombre en la segunda línea
# el nobre de la cuenta en la tercera
# Haz un commit en la última línea
$objOU=[ADSI]“LDAP://OU=People,DC=dominio,DC=priv”
$objUser=$objOU.Create(“user”,”CN=usr3″)
$objUser.Put(“sAMAccountName”,”usr.3″)
$objUser.SetInfo()
# Ya una vez que hemos creado el usuario, es ahora cuando cambiamos la contraseña y habilitamos el usuario.
$objUser.SetPassword(“Carpintero4″)
$objUser.psbase.InvokeSet(“AccountDisabled”,$false)
$objUser.SetInfo()
—————————————————————————————————

IvanZito


-->