Desplegar un dominio de Active Directory por PowerShell

1 noviembre 2016
Josep Ma Solanes 0

Automatizando el proceso de desplegar un dominio de Active Directory de Windows Server 2016 core desde 0 por PowerShell. De esta forma se automatiza todo el proceso para evitar posibles errores humanos y acelerar el proceso de despliegue. Se construye el script paso a paso, entendiendo todo el proceso para llegar a desplegar un dominio. Al final del artículo encontraréis el enlace a GitHub de los archivos utilizados.

Para llevar a cabo esta tarea, se parte de una máquina virtual con Windows Server 2016 core, desplegada según la maqueta que se ha creado siguiendo la entrada de instalación de Windows Server core. Si, lo sé, esta entrada hace referencia a la versión de Windows Server 2012 R2, los pasos son los mismos para la versión Windows Server 2016. No es necesario que hagáis la configuración de las tarjetas de red ya que las haremos con este mismo script.

Iniciar sesión en la consola local, como que es una máquina que aún no está en el dominio, es precisamente lo que queremos hacer, desplegar un dominio nuevo de Active Directory.

Desplegar un domini per PowerShell

El símbolo de comandos que obtenemos es el tradicional. Se tiene que hacer el salto a la PowerShell, ¿cómo? Pues ejecutando el comando:

powershell

La diferencia está en qué al inicio del prompt (donde nos indica en que carpeta estamos) hay las iniciales PS de PowerShell.

Desplegar un domini per PowerShell - Diferència entre consola i PowerShell

 

Personalizar la máquina para desplegar un dominio de Active Directory

Los despliegues de máquinas a partir de plantillas son despliegues genéricos, hay que personalizar el nombre, el direccionamiento IP y los servidores de DNS.

Para cambiar el nombre de la máquina, se recupera el nombre actual con la variable de sistema $env:computername y se asigna un nuevo nombre, por ejemplo, srvDC1. Se tiene que reiniciar la máquina, pero aún no lo hacemos.

rename-computer -computername $env:computername -newname srvDC1

Como buena práctica en un servidor no utilizaremos nunca direccionamiento IP dinámico, y menos en un controlador de Active Directory. Toca configurar una dirección IP estática. Este apartado puede ser un poco más difícil de automatizar. Lo primero que se hace es localizar cuál es el adaptador de red Get-NetAdapter -Physical que está levantado where-object {$_.Status -eq "up"}, tiene conexión, y se asigna a una variable: $tarjeta. Para jugar un poco más, se sustituye el comando where-object por el símbolo de interrogación, es lo mismo ?:

$tarjeta = Get-NetAdapter | ? {$_.Status -eq "up"}

Tenemos el adaptador, el siguiente paso es eliminar cualquier dirección IP que pueda tener para añadir una de nueva. Se hace con una sentencia condicional, es decir, se comprueba que tenga una dirección IP y en este caso la elimina:

if (($tarjeta | Get-NetIpConfiguration).IPv4Address.IPAddress)
{
   $tarjeta | Remove-NetIpAddress -AddressFamily IPv4 -Confirm:$false
}

Repetimos el proceso para la puerta de enlace por defecto:

if (($tarjeta | Get-NetIpConfiguration).IPv4DefaultGateway)
{
   $tarjeta | Remove-NetRoute -AddressFamily IPv4 -Confirm:$false
}

Definimos las variables para la configuració IP del servidor. De esta forma nos será más fácil ir modificando el script para aplicarlo a cualquier sitio, sólo cambiando el contenido de estas variables: Dirección IP ($IP), máscara de la red ($Mascara), puerta de enlace ($Puerta) y el servidor de DNS ($DNS) que como es para desplegar un dominio desde cero se utiliza la propia dirección IP asignada al servidor.

$IP = "192.168.1.202"
$Mascara = 24
$Puerta = "192.168.1.201"
$DNS = $IP

Ejecutamos los comandos asignando las variables anteriores para establecer la configuración de direccionamiento IP del servidor:

$tarjeta | New-NetIpAddress -AddressFamily IPv4 -IPAddress $IP -PrefixLength $Mascara -DefaultGateway $Puerta
$tarjeta | set-DNSClientServerAddress -ServerAddress $DNS

Ahora sí se tiene que reiniciar el equipo, tiene que hacer el cambio de nombre del equipo y arrancar con la nueva configuración IP:

shutdown /r /t 0 /f

Si es la primera vez y no estáis seguros que todo funcione correctamente se puede comprobar con los comandos:

$env:computername
$tarjeta = Get-NetAdapter | ? {$_.Status -eq "up"}
($tarjeta | Get-NetIpConfiguration).IPv4Address.IPAddress
($tarjeta | Get-NetIpConfiguration).IPv4DefaultGateway
Get-DNSClientServerAddress

Desplegar un domini amb PowerShell. Comprovant canvis de IP i noms

 

Instalar el rol de Active Directory y servidor DNS para desplegar un dominio

De pasada, si os apetece o no os acordáis de como se llama el rol o característica a instalar, se puede comprobar que roles y características tenemos disponible para instalar o estar instalado con el comando:

Get-WindowsFeature

Para desplegar el rol de Active Directory y DNS se utiliza el comando:

Install-WindowsFeature AD-Domain-Services,DNS

Como que no es muy habitual ir desplegando servidores de Active Directory por PowerShell, por defecto no hay cargado el módulo para su despliegue. Para cargarlo, ejecutar:

Import-module addsdeployment

A priori no hace nada, pero si comprobáis los módulos cargados en la PowerShell, en el listado aparece el addsdeployment:

get-module

Recordad, si estáis perdidos o no recordáis el comando, que para visualizar los cmdlets que pertenecen o estan disponibles en un módulo lo podéis hacer con el comando:

get-command -module addsdeployment

Desplegar un domini per PowerShell. Comprovació del mòdul instal·lació Active Directory

 

Llegamos a la parte más caliente, desplegar un dominio de Active Directory. Para crearlo, utilizo los siguientes datos:

  • Nombre del dominio y del bosque: jmsolanes.local
  • Nombre NetBIOS del dominio: jmsolanes
  • Nivel funcional del bosque establecido en Windows Server 2016 nativo.
  • Nivel funcional del dominio establecido en Windows Server 2016 nativo.
  • El servidor actuará como catálogo global.
  • El servidor hará de DNS integrado con el Active Directory.
  • Contraseña para la recuperación del Active Directory: P@ssw0rd (en entornos en producción NO utilizaréis esta contraseña, claro).
  • La carpeta de base de datos del Active Directory se ubicará en la carpeta por defecto: c:\Windows\NTDS
  • La carpeta de logs del Active Directory se ubicará en la carpeta por defecto: c:\Windows\NTDS
  • La carpeta SYSVOL del Active Directory se ubicará en la carpeta por defecto: c:\Windows\SYSVOL

Para jugar, establecemos las variables que necesitamos. Ui. ¿Son pocas no?:

$dominioFQDN = "jmsolanes.local"
$dominioNETBIOS = "jmsolanes"

El comando para desplegar un dominio Windows Server 2016 nativo, una vez acaba reinicia automáticamente el servidor para aplicar los cambios:

Install-ADDSForest -DomainName $dominioFQDN -DomainNetBiosName $dominioNETBIOS -SafeModeAdministratorPassword (ConvertTo-SecureString -string "P@ssw0rd" -AsPlainText -Force) -DomainMode WinThreshold -ForestMode WinThreshold -InstallDNS -Confirm:$false

Se ha reiniciado el servidor, para trabajar cómodamente con los siguientes comandos, volvemos a declarar las variables del dominio, esta vez, añadiendo el dominio LDAP ($dominioLDAP), alerta la coma del inicio:

$dominioFQDN = "jmsolanes.local"
$dominioLDAP = ",DC=jmsolanes,DC=local"

Afinamos un poco la configuración del Active Directory habilitando la papelera de reciclaje para los objetos del mismo. Ojo, esta es una operación que no tiene punto de retorno. Si el dominio no se tiene que degradar porque nos hayamos equivocado, es la mejor opción que podéis hacer, de lo contrario, mejor saltar este paso.

Enable-ADOptionalFeature -Identity ("cn=Recycle Bin Feature,cn=Optional Features,CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration" + $dominioLDAP) -Scope ForestOrConfigurationSet -target $dominioFQDN -Confirm:$false

 

Afinando el servidor de DNS

No nos olvidemos que el servicio de DNS es una de las partes más importantes del Active Directory, si no está bien definido o no funciona, el invento se desmorona.

$ReenviaDNS1 = "8.8.8.8"
$ReenviaDNS2 = "8.8.4.4"
$RedInversa = "192.168.1.0/24"

En este caso, establecemos los reenviadores de DNS hacia Internet (ISP):

Set-DNSServerForwarder -IPAddress $ReenviaDNS1,$ReenviaDNS2

Manías mías, modificar el registro del DNS para que sólo aparezcan los errores.

Set-DnsServerDiagnostics -EventLogLevel 1

Crear la zona de búsqueda inversa, que muchas veces nos dejamos, alojada en el Active Directory y que sólo permita las actualizaciones seguras:

Add-DNSServerPrimaryZone -NetworkId $RedInversa -ReplicationScope "Forest" -DynamicUpdate Secure -Confirm:$false

Forzar el registro del servidor en el DNS, tanto en la zona directa como en la inversa:

Register-DNSClient

Hacemos una pequeña consulta rápida para comprobar los registros de HOSTS dentro del DNS, en caso de aparecer registros extraños (por ejemplo el nombre del servidor anterior) convendría hacer limpieza:

Get-DnsServerResourceRecord -ZoneName $dominioFQDN -RRType "A"

 

Scripts para desplegar un dominio de Active Directory

Felicidades, ya tenemos un Active Directory desplegado por PowerShell, pero eso «no mola». ¡Lo quiero hacer más rápido!. Creamos el script final juntando los comandos en tres partes, para los diferentes reinicios que se necesitan:

 

Script de personalización de la máquina

Recordemos que es lo primero a ejecutar con la máquina pelada.

$nombreservidor = "srvDC1"
$IP = "192.168.1.202"
$Mascara = 24
$Puerta = "192.168.1.201"
$DNS = $IP

rename-computer -computername $env:computername -newname $nombreservidor
$tarjeta = Get-NetAdapter | ? {$_.Status -eq "up"}
if (($tarjeta | Get-NetIpConfiguration).IPv4Address.IPAddress) { $tarjeta | Remove-NetIpAddress -AddressFamily IPv4 -Confirm:$false }
if (($tarjeta | Get-NetIpConfiguration).IPv4DefaultGateway) { $tarjeta | Remove-NetRoute -AddressFamily IPv4 -Confirm:$false }
$tarjeta | New-NetIpAddress -AddressFamily IPv4 -IPAddress $IP -PrefixLength $Mascara -DefaultGateway $Puerta
$tarjeta | set-DNSClientServerAddress -ServerAddress $DNS
shutdown /r /t 0 /f

 

Script de configuración del Active Directory

Reiniciada la máquina después de parametrizarla, se hace el despliegue y configuración del rol de Active Directory y DNS.

$dominioFQDN = "jmsolanes.local"
$dominioNETBIOS = "jmsolanes"
Install-WindowsFeature AD-Domain-Services,DNS
Import-module addsdeployment
Install-ADDSForest -DomainName $dominioFQDN -DomainNetBiosName $dominioNETBIOS -SafeModeAdministratorPassword (ConvertTo-SecureString -string "P@ssw0rd" -AsPlainText -Force) -DomainMode WinThreshold -ForestMode WinThreshold -InstallDNS -Confirm:$false

 

Script de parametrización del Active Directory

Activar la papelera de reciclaje y parametrizar el servicio de DNS. También es cierto, que este script se puede unir con el anterior en caso que utilizemos una sesión remota de PowerShell para lanzar los comandos.

$dominioFQDN = "jmsolanes.local"
$dominioLDAP = ",DC=jmsolanes,DC=local"
$ReenviaDNS1 = "8.8.8.8" 
$ReenviaDNS2 = "8.8.4.4" 
$RedInversa = "192.168.1.0/24"
Enable-ADOptionalFeature -Identity ("cn=Recycle Bin Feature,cn=Optional Features,CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration" + $dominioLDAP) -Scope ForestOrConfigurationSet -target $dominioFQDN -Confirm:$false
Set-DNSServerForwarder -IPAddress $ReenviaDNS1,$ReenviaDNS2 
Set-DnsServerDiagnostics -EventLogLevel 1 
Add-DNSServerPrimaryZone -NetworkId $RedInversa -ReplicationScope "Forest" -DynamicUpdate Secure -Confirm:$false 
Register-DNSClient

Ya tenemos el Active Directory completamente operativo, virgen, eso sí, pero a punto para empezar a crear cosas que veremos en otra entrada.

 

¿Te ha gustado el articulo? Lo puedes compartir en las redes sociales. También puedes dejar tu opinión, comentario o sugerencia. ¡Gracias!

Similar Posts by The Author:

 

Deixar un comentari

Recorda que no es contestaran preguntes personals, només d´interés comú que ens enriqueixin a tots.
La teva adreça de correu electrònic no serà publicada. Els camps obligatoris estan indicats.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.