Archivado en: ‘Windows’ .

Migración DHCP de 2003 R2 a 2008 R2

9 Julio, 2010

En los entornos de red de nuestras compañías nos encontramos que por labores de mantenimiento o por actualizaciones de versiones en nuestra plataforma, debemos migrar los servicios. La migración de un servidor DHCP suele ser una de las primeras opciones a realizar, y se complicará dependiendo de la configuración que tengamos actualmente. Si en nuestra plataforma no tenemos activada ninguna reserva de ip´s esta migración se agiliza bastante.

En el caso que mostraré a continuación la migración se realizará con un número indeterminado de reservas.

Lo primero que tenemos que realizar en el servidor origen es un export de nuestro DHCP. No es necesario parar el servicio, ya que, es probable que las reservas que tengamos activas no se migren correctamente. Abrimos una consola de msdos (pinchamos Inicio–>Ejecutar: cmd).

Una vez abierta ejecutamos el siguiente comando:

netsh dhcp server export c:\dhcpdb all

Este comando nos guarda el estado actual del DHCP en el archivo dhcpbd.

El siguiente punto será copiar el archivo al servidor destino. Nos conectamos utilizando el explorados de windows : \\Nombre_Servidor_destino\c$ y copiamos el archivo.

Al conectarnos al servidor de destino por terminal services, volvemos a abrir una ventana de ms-dos como lo hicimos en nuestro 2003 y ejecutamos el siguiente comando, de nuevo con el dhcp arrancado, pero sin que tenga ningún scope configurado:

netsh dhcp server import c:\dhcpdb all

Una vez que abramos el dhcp (Inicio–> Herramientas Administrativas –> DHCP) podremos comprobar que tenemos el scope configurado y nuestras reservas igual que en nuestro 2003.

Manual Integrated Windows Authentication con Firefox

16 Marzo, 2010

Vamos a explicar cómo habilitar la Autenticación Windows Integrada con Firefox de forma manual.

En próximos artículos definiremos como hacerlo basado en políticas de dominio (GPO). Es posible, aunque no es 100% automático.

Para ello simplemente debemos abrir nuestro Firefox y acceder a esta dirección: about.config

Aquí pulsaremos en ¡Tendré cuidado, lo prometo!

» Leer más: Manual Integrated Windows Authentication con Firefox

Necesario instalar el KB962975 en servidores con discos dinámicos (Windows 2008 y Vista)

16 Marzo, 2010

Microsoft a vuelto a sacar un nuevo Hotfix KB962975, que soluciona un serio problema en servidores con discos dinámicos. Básicamente se pierde toda la información de los discos.

El problema a fecta al servicio Volume Manager de Windows Vista y Windows 2008. Este parche no aplica a Windows 2008 R2.

Los casos en los que afecta el parche son estos:

  • Crear más de 99 volúmenes en uno o más discos dinámicos en un equipo que ejecuta Windows Server 2008 o Windows Vista.
  • El tamaño de uno de los volúmenes es superior a 2 terabytes.
  • Poner todos los discos dinámicos en línea, desconectar todos los discos dinámicos o reinicie el equipo.

» Leer más: Necesario instalar el KB962975 en servidores con discos dinámicos (Windows 2008 y Vista)

Filtros de seguridad en Directorio Activo para GPOs

25 Febrero, 2010

Imagína que tenemos una política aplicada y queremos que dicha política no se aplique a determinadas máquinas, por lo que necesitamos hacer un filtro y luego aplicar ese filtro de manera que a determinadas máquinas o usuarios no se les aplique.

En primer lugar creamos un grupo por ejemplo: excepcion_Standart_de_GPO1

Tenemos que meter en este grupo las máquinas o usuarios que queremos excluir en la aplicación de la política. Por lo tanto es a nivel de política de dominio, por lo que vamos a trabajar sobre esta:

Ahora sobre la GPO de dominio nos vamos a la pestaña “Delegation” aquí damos al botón abajo a la derecha “Avanzadas” y agregamos el grupo que hemos creado. Marcaremos el check “Denegar” para la entrada de seguridad “Apply group Policy”.

La configuración de dengación es más restrictiva que la de lectura, es decir, que aunque haya un grupo en la pestaña “delegation” que permita aplicar la política a las máquinas, al existir uno más restrictivo, el resultado será DENEGACIÓN.

IvanZito

Loopback Policies. Control de políticas locales

25 Febrero, 2010

Muchas veces nos encontramos en la obligación de tener que cambiar políticas locales de las máquinas y además tenemos que controlar estas desde el dominio, para que cuando un usuario no esté conectado al dominio  un portátil tenga una configuración especial.

Vamos a realizar un ejemplo típico donde nuestro usuario  está con el portátil desconectado e inicia sesión con su portátil, aquí se le muestra un fondo de escritorio que no es corporativo y nuestro usuario da una imagen ante nuestros clientes poco corporativa.

Deseamos que cuando utilice su portátil y no esté conectado al dominio, su escritorio no pueda tener ningún wallpapers o tenga uno corporativo.

Lo primero que hay que hacer es un grupo donde alberguemos todas las máquinas del departamento o por ejemplo como hemos realizado a continuación, meter todos los portátiles del departamento finanzas:

Una vez que tenemos nuestro grupo preparado. Debemos crear la política que luego vamos a utilizar, para ello en el administrador de políticas GPMC creamos una nueva política para forzar el escritorio del usuario que queramos:

Para nuestra configuración es necesario no sólo configurar la política del escritorio, tenemos que configurar una política llamada: “User Group Policy loopback Proccesing Mode”. Esta política hace que se haga un “merge” (una fusión) de la política de dominio con las políticas locales. Realizándose una mezcla de los dos scopes: Dominio y Local

La explicación de las opciones de la política sería la siguiente:

Replace: La configuración definida por el usuario en su máquina en los objetos de política o en su Shell, reemplaza la configuración de políticas que nosotros estamos aplicando en el dominio o las que normalmente se le aplica. Esto quiere decir que vale más lo que el usuario haya configurado que nuestra política de dominio.

Merge: La configuración final del usuario es una fusión de las políticas locales y las políticas de dominio. Cuando el usuario no está logado en el dominio se realiza la fusión o “merge” de dichas políticas. Si hay conflicto en las políticas  se aplica la configuración del usuario.

Este tipo de política se aplicará a cualquier usuario que haga logon en la máquina.

Configurarémos entonces: “User Group Policy loopback Proccesing Mode

Ahora asigna tú política a la OU donde están las máquinas o la unidad organizativa donde están las máquinas a las que quieres aplicar la política y abajo en Scope, selecciona el grupo que has creado con los portátiles, así sólo se aplicará a las máquinas del grupo y no a los demás:

IvanZito

Una vez que tenemos nuestro grupo preparado. Debemos crear la política que luego vamos a utilizar, para ello en el administrador de políticas GPMC creamos una nueva política para forzar el escritorio del usuario que queramos:

Canales CSEs: Replicación de políticas GPOs.

21 Febrero, 2010

Canales CSEs ( Replicación de políticas  GPOs ) en dominio.

Cuando se crea o modifica una politica esta se refresca a las máquinas clientes, pero si la política no ha cambiado dicho cambio no se transmite lo que puede causar algún problema de replicación.

Las políticas se refrescan por grupos, siendo estas por ejemplo un grupo para las que tienen que ver con IP Security, otras con EFS, otras con carpetas y así sucesivamente hasta hacer el total de grupos que albergan todas las políticas.

Quiero  decir con esto que el proceso de replicación se produce no en una sola acción sino en varias que son administradas por el Cliente de Políticas de las máquinas.

Cada uno de estos procesos que se realiza de forma independiente y que sólo actualiza el grupo de politicas al que pertenece se llama CSE.

Digamos para entenderlo mejor, un CSE es un subconjunto de políticas del conjunto que alberga todas las GPOs. Las políticas se replican en varios procesos cada uno es una canal que sólo replica un subconjunto de todas las GPOs.

Así si quieres que un CSEs( Proceso por el cual se actualiza el grupo de políticas concreto) se replique aunque no haya habido cambios dentro de dicho grupo de políticas. En la GPO de dominio tienes que entrar en el CSEs correspondiente y seleccionar la opción que tienes en la imagen siguiente y se llama “ Process even if the Group Policy objetcs have not change”.

Existe un servicio en las máquinas que se pone en funcionamiento para hacer gestionar dichos canales CSEs se llama Group Police Client es el encargado de poner en funcionamiento los canales de replicación de políticas y hacer que las máquinas clientes reciban las políticas por los diferentes canales CSE.

Es importate que sepas que estas políticas son reaplicadas cada 16 horas y no cada 90 o 120 minutos como las políticas que han sido creadas o modificadas. Una política que no ha sufrido cambios en la configuración pero tiene marcada esta opción hará su replica por medio de su canal correspondiente CSE cada 16 horas y las que han sido modificadas cada 90 ó 120 minutos.

Utilizar filtros WMI para aplicar GPOs

18 Febrero, 2010

Algunas veces hemos necesitado hacer algún filtro en las políticas para que no se apliquen a algunas máquinas concretas o algunas con algunas características especial. Bien, aparecen para ayudarnos los llamados Filtros WMI para aplicar las políticas a las máquinas con las características deseadas o bien no aplicar a determinadas máquinas.

Es necesario hacer consultas WQL que son parecidas a las consultas SQL pero sobre los objetos WMI.

Cuando seleccionamos el “Scope” de una política ( el grupo de objetos a los que queramos aplicar), podemos utilizar dichos filtros de manera que nuestra política sólo se aplique a las OUs, Sites o Dominos que queramos.

Primero tenemos que crear un filtro que será luego el Scope que utilizará la política.

Creamos nuevo filtro desde el administrador de políticas, GPM:

Ahora crea el filtro:

Ahora sobre una política ya definida, utiliza la pestaña Scope para aplicar a la política el filtro:

Con esto, conseguirás que esta política sólo se aplique a las máquinas con SP3.

IvanZito

Actualización SP3 SQL 2005 en cluster Microsoft

16 Febrero, 2010

Para realizar la instalación del SP3 en un cluster de SQL debes proceder con el SP3 en el nodo activo. Dicho Service Pack se encarga de actualizar los servicios comunes que se encuentran clusterizados. Esto quiere decir que al ejecutar el SP3 en el nodo activo actualizará el nodo1 y el nodo2 sólo pero sólo los servicios que se pueden poner en cluster :

• SQL Server ( Motor de la base de datos )
• Analysis Services

Por ello cuando realizas una instalación en cluster sólo puedes instalar como cluster esto:

Los demás servicios al no ser clusterizables, se actualizan de forma independiente.
Esto quiere decir que tendremos que ejecutar otra vez el SP3 en el nodo pasivo (nodo2 ) y aquí se actualizará todo menos el Analysis Services y el motor de SQL Server, estos no saldrán marcados ya que es el nodo pasivo.
Para realizar la instalación mantén todos los recursos en el nodo1 y no los cambies hasta terminar la actualización completamente en ambos servidores, siempre deja los recursos en un nodo durante todo el proceso, por ejemplo en el nodo1.
Fíjate como cuando actualizas en el nodo 1 el SP3, la instalación hace referencia a la instancia de cluster actualizando los archivos en ambos nodos. Primero haciendo el nodo pasivo y luego el activo, no te preocupes si tarda la siguiente pantalla, está actualizando en primer lugar el pasivo:

Aclaremos una cosa, hay algunos servicios de SQL que se pueden poner en cluster. Esto significa que cuando los instales tienes que hacerlo tanto en nodo como en otro de forma independiente, estos son los siguientes:

Esta es la razón por la que la actualización, también ha que pasarla luego en el nodo pasivo, para que actualice estos componentes. Si no has instalado ninguno de estos no sería necesario pasar la actualización en el nodo 2. Sólo en el nodo que los tengas instalados.

Un dato importante después de la actualización fijarnos en el motor de la bbdd dentro del SQL Management y verificar si la versión que has instsalado es la correcta:

9.00.1399 – SQL Server 2005 release (RTM)
9.00.2047 – SQL Server 2005 SP1
9.00.3042 – SQL Server 2005 SP2
9.00.4053 – SQL Server 2005 SP3

8.00.194 – SQL Server 2000 release (RTM)
8.00.384 – SQL Server 2000 SP1
8.00.534 – SQL Server 2000 SP2
8.00.760 – SQL Server 2000 SP3
8.00.2039 – SQL Server 2000 SP4

7.00.623 – SQL Server 7.0 release (RTM)
7.00.699 – SQL Server 7.0 SP1
7.00.842 – SQL Server 7.0 SP2
7.00.961 – SQL Server 7.0 SP3
7.00.1063 – SQL Server 7.0 SP4

6.50.201 – SQL Server 6.5 release (RTM)
6.50.213 – SQL Server 6.5 with Service Pack 1
6.50.240 – SQL Server 6.5 with Service Pack 2
6.50.258 – SQL Server 6.5 with Service Pack 3
6.50.281 – SQL Server 6.5 with Service Pack 4
6.50.415 – SQL Server 6.5 with Service Pack 5
6.50.416 – SQL Server 6.5 with Service Pack 5a

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 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