Archivado en: ‘Windows’ .

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

Importar usuarios desde Excel o txt a AD

28 Diciembre, 2009

Este pequeño artículo define de una forma muy sencilla la manera de importar usuarios a un Active Directory desde una hoja de excel (.csv) o desde un archivo de texto (.txt)

Para ello utilizaremos el comando: CSVDE

Mostraremos ahora como crear un archivo de texto y como utilizar dicho comando para realizar la importación de usurios

Es conveniente conocer los parámetros de este comando, son muy sencillos:

-i : Muy necesario ya que pone el comando en modo “import”
-f : indica el archivo que vamos a utilizar para importar ( URL del excel )
-k : se usa para ocultar los errores de duplicidad de objetos o errores en atributos saltándose estos.. Es recomendable crear una archivo como salida para ver dichos errores y proceder a su corrección posteriormente.

La hoja de excel o bien el archivo de texto separado por comas debe tener la siguiente estrucutra, las columnas son la primera fila, siendo estos los metadatos de Active Directory que que quieres rellenar y bajo estos ordenados de la misma forma lo que vamos a rellenar, como ves, la primera palabra de cada registro es el tipo de objeto que en este caso es un “User”:

Ejemplo usuarios.txt

objectClass,sAMAccountName,dn
user,user5,” CN=user5 Apellido5,OU=People,DC=dominio,dc=priv”
user,user6,” CN=user6 Apellido6,OU=People,DC=dominio,dc=priv”
user,user7,” CN=user7 Apellido7,OU=People,DC=dominio,dc=priv”

Ejecutamos el siguiente comando para ejecutar la importación:

PS C:\> csvde -i -f usuarios.txt >> errores.log

Connecting to “(null)”
Logging in as current user using SSPI
Importing directory from file “usuarios.txt”
Loading entries….
3 entries modified successfully.

Quizá te ahorre algún trabajo si te toca un “brown” de crear 300 usuarios.

IvanZito

Comandos DN ( Administración AD )

28 Diciembre, 2009



Vamos a repasar algunos comandos muy útiles y poco conocidos para los administradores que no trabajan con Active Directory normalmente. Estos comandos son los denominados DS Command. Sirven para manejar los objetos del directorio activo y son los siguientes.


DsAdd: Crea un objeto en el Directorio Activo

DsGet: Devuelve atributos específicos de un objeto

DsMod: Modifica atraibutos de un objeto del Directorio Activo.

DsMove: Mueve objetos de un contenedor a otro dentro del Active Directory

DsRm: Borra un objeto. Ten cudidado con este comando porque por defecto borra todo el arbol de objetos del dominio.

DsQuery: Devuelve parámetros basados en consultas sobre el Active Directory. Por defecto la salida del comando te da la ruta ( DN ) Domain Name, la habitual ( “CN=Barcelona, OU=Oficina de Madrid,DC=Dominio,DC=Priv” ) pero con el modificados “-o” puedes hacer que la salida sea un RDN ( Relative Domain Name ), UPN, Pre-Windows 2000 … etc.


IvanZito

IIS 6 no funciona después de instalar la actualización KB 973917

21 Diciembre, 2009

El sistema operativo le indica que debe instalar la actualización KB 973917.

Tras aplicar la actualización le aparecen estos síntomas en el servidor:ws23logo IIS 6 no funciona después de instalar la actualización KB 973917

  • Los Application pools o los websites no inician nuevamente.
  • Los sitios web de IIS pueden no iniciar.
  • La protección habilitada por la opción “Rapid fail protection” puede deshabilitar los Application Pools

¿Qué es lo que sucede?

No todas las instalaciones de IIS ejecutándose en un servidor Windows 2003 se ven impactadas por esta actualización. USTED PUEDE INSTALAR ESTA ACTUALIZACION y continuar utilizando IIS 6.0 normalmente. El único caso en el que puede ocurrir este error es el siguiente:
Usted instalo Windows 2003 y usted no instalo IIS 6.0 al momento de instalar el sistema operativo. Posteriormente usted instalo el Service Pack 1 o el Service Pack 2 de Windows 2003 directamente y despues de instalar correctamente cualquiera de los Service Pack usted decidió instalar IIS 6.0. Cuando se encontraba instalando IIS 6.0 le fueron solicitados los discos originales del sistema operativo (no los discos del Service Pack 1 o del Service pack 2).
Si usted siguió el escenario anteriormente descrito, usted pudo haber terminado con lo que es llamado un “binary mismatch” o una incongruencia de librerías entre las librerías del sistema operativo y las librerías pertenecientes a IIS. En otras palabras los archivos del sistema operativo Windows 2003 pertenecen a las versiones del Service Pack 2 mientras que los archivos de IIS 6.0 pertenecen a las versiones del Service Pack 1 o RTM del sistema operativo.

¿Cómo se puede Verificar si usted se encuentra en este escenario?

En una ventana de comandos de Windows 2003, ejecute el siguiente comando:
C:\>winver
Esto le mostrara la versión de Windows 2003 que usted está ejecutando y que nivel de actualizaciones tiene. Usted debería ver que el sistema operativo esta actualizado a la versión del Service Pack 2. De no ser así, usted debe considerar seriamente la posibilidad de actualizar a la versión 2 del Service Pack ya que la versión 1 de Service pack ya no es soportada.
Si usted está ejecutando la versión de Windows 2003 con Service Pack 2 instalado, proceda a verificar la versión de uno de los archivos de IIS 6.0. Una de las librerías fáciles de ubicar es iisutil.dll, la cual está ubicada en el directorio %windir%\system32\inetsrv. Una vez encontrada la librería proceda a ver las propiedades del archivo para ver la información de la versión del archivo. Si usted tiene una versión que contiene un 0 después del último punto decimal o una versión con un número menor a 3000 después del último punto decimal, usted tiene un “binary mismatch”. La versión actual del archivo debe ser la siguiente:
6.0.3790.3959

¿Por qué se produce este problema?

La última actualización que viene en el KB 973917 trae una nueva versión de la librería w3core.dll. Esta nueva versión del archivo intentara llamar una API localizada en iisutil.dll. Esta API que está siendo llamada solamente podrá ser encontrada en la librería iisutil.dll que se instala con la versión 2 del Service pack de Windows 2003. SI usted instalo IIS 6.0 después de haber instalado el Service Pack 2 de Windows 2003 es muy posible que usted caiga en este problema.

Solución:

Si usted se encuentra en esta situación, y solamente después de haber confirmado los síntomas como se indicó en este artículo anteriormente, usted debe proceder a reinstalar el Service Pack 2 de Windows 2003 Server el cual puede encontrar en el siguiente enlace:
Usted no necesita desinstalar e instalar nuevamente el Service Pack 2 de Windows 2003. Tan solo reinstale el Service Pack 2 y esto instalara la versión adecuada de la librería iisutil.dll lo que eliminará el problema.

-->