Desplegar un domini d’Active Directory per PowerShell

Publicat el Deixar un comentari Etiquetes: , ,

Esta entrada también está disponible en: Castellà

Automatitzant el procés de desplegar un domini d’Active Directory de Windows Server 2016 core des de 0 per PowerShell. D’aquesta forma s’automatitza tot el procés per tal d’evitar possibles errors humans i accelerar el procés de desplegament. Es construeix l’script pas a pas, entenent tot el procés per arribar a desplegar un domini. Al final de l’article trobareu l’enllaç a GitHub dels fitxers utilitzats.

Per dur a terme aquesta tasca, es parteix d’una màquina virtual amb Windows Server 2016 core, desplegada segons la maqueta que s’ha creat seguint l’entrada de instal·lació de Windows Server core. Si, ho sé, aquesta entrada fa referència a la versió de Windows Server 2012 R2, els passos són els mateixos per la versió Windows Server 2016. No cal que feu la configuració de les targetes de xarxa ja què les farem amb aquest mateix script.

Iniciar sessió a la consola local, com que és una màquina que encara no està al domini, és precisament el què volem fer, desplegar un domini nou d’Active Directory.

Desplegar un domini per PowerShell

El símbol de comandes que obtenim és el tradicional. S’ha de fer el salt a la PowerShell, com? Doncs executant la comanda:

powershell

La diferència està en què a l’inici del prompt (on ens indica en quina carpeta estem) hi ha les inicials PS de PowerShell.

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

 

Personalitzar la màquina per desplegar un domini d’Active Directory

Els desplegaments de màquines a partir de plantilles són desplegaments genèrics, cal personalitzar el nom, l’adreçament IP i els servidors de DNS.

Per canviar el nom de la màquina, es recupera el nom actual amb la variable de sistema $env:computername i s’assigna un nou nom, per exemple, srvDC1. S’ha de reinciar la màquina, però encara no ho fem.

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

Com a bona pràctica en un servidor no utilitzarem mai adreçament IP dinàmic, i menys en un controlador d’Active Directory. Toca configurar una adreça IP estàtica. Aquest apartat pot ser una mica més difícil d’automatitzar. El primer que es fa és localitzar quin és l’adaptador de xarxa Get-NetAdapter -Physical que està aixecat where-object {$_.Status -eq "up"}, té connexió, i s’assigna a una variable: $targeta. Per jugar una mica més, es substitueix la comanda where-object pel símbol de interrogació, és el mateix ?:

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

Tenim l’adaptador, el següent pas és eliminar qualsevol adreça IP que pugui tenir per afegir una de nova. Es fa amb una sentència condicional, és a dir, es comprova que tingui una adreça IP i en aquest cas, l’elimina:

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

Repetim el procés per la porta d’enllaç per defecte:

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

Definim les variables per la configuració IP del servidor. D’aquesta forma ens serà més fàcil anar modificant l’script per aplicar-lo a qualsevol lloc, només canviant el contingut d’aquestes variables: Adreça IP ($IP), màscara de la xarxa ($Mascara), porta d’enllaç ($Porta) i el servidor de DNS ($DNS) que com és per desplegar un domini des de zero s’utilitza la pròpia adreça IP assignada al servidor.

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

Executem les comandes assignant les variables anteriors per establir la configuració d’adreçament IP del servidor:

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

Ara sí s’ha de reiniciar l’equip, ha de fer el canvi de nom de l’equip i arrencar amb la nova configuració IP:

shutdown /r /t 0 /f

Si és la primera vegada i no esteu segurs que tot funcioni correctament es pot comprovar amb les comandes:

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

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

 

Instal·lar el rol d’Active Directory i servidor DNS per desplegar un domini

De passada, si us ve de gust o no us recordeu de com es diu el rol o característica a instal·lar, es pot comprovar quins rols i característiques tenim disponible per instal·lar o estar instal·lat amb la comanda:

Get-WindowsFeature

Per desplegar el rol d’Active Directory i DNS s’utilitza la comanda:

Install-WindowsFeature AD-Domain-Services,DNS

Com que no és gaire habitual anar desplegant servidors d’Active Directory per PowerShell, per defecte no hi ha carregat el mòdul pel seu desplegament. Per carregar-lo, executar:

Import-module addsdeployment

A priori no fa res, però si comproveu els mòduls carregats a la PowerShell, al llistat apareix el addsdeployment:

get-module

Recordeu, si esteu perduts o no recordeu la comanda, que per visualitzar els cmdlets que pertanyen o estan disponibles en un mòdul ho podeu fer amb la comanda:

get-command -module addsdeployment

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

 

Arribem a la part més calenta, desplegar un domini d’Active Directory. Per crear-lo, utilitzo les següents dades:

  • Nom del domini i del bosc: jmsolanes.local
  • Nom NetBIOS del domini: jmsolanes
  • Nivell funcional del bosc establert a Windows Server 2016 natiu.
  • Nivell funcional del domini establert a Windows Server 2016 natiu.
  • El servidor actuarà com a catàleg global.
  • El servidor farà de DNS integrat amb l’Active Directory.
  • Contrasenya per la recuperació de l’Active Directory: P@ssw0rd (en entorns en producció NO utilitzareu aquesta contrasenya, és clar).
  • La carpeta de base de dades de l’Active Directory s’ubicarà a la carpeta per defecte: c:\Windows\NTDS
  • La carpeta de logs de l’Active Directory s’ubicarà a la carpeta per defecte: c:\Windows\NTDS
  • La carpeta SYSVOL de l’Active Directory s’ubicarà a la carpeta per defecte: c:\Windows\SYSVOL

Per jugar, establim les variables que necessitem. Ui. Són poques no?:

$dominiFQDN = "jmsolanes.local"
$dominiNETBIOS = "jmsolanes"

La comanda per desplegar un domini Windows Server 2016 natiu, un cop acaba reinicia automàticament el servidor per aplicar els canvis:

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

S’ha reiniciat el servidor, per treballar còmodament amb les següents comandes, tornem a declarar les variables del domini, aquest cop, afegint el domini LDAP ($dominiLDAP), alerta la coma del inici:

$dominiFQDN = "jmsolanes.local"
$dominiLDAP = ",DC=jmsolanes,DC=local"

Afinem una mica la configuració de l’Active Directory habilitant la paperera de reciclatge pels objectes del mateix. Ull, aquesta és una operació que no té punt de retorn. Si el domini no s’ha de degradar perquè ens haguem equivocat, és la millor opció que podeu fer, del contrari, millor saltar aquest pas.

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

 

Afinant el servidor de DNS

No ens oblidem que el servei de DNS és una de les parts més importants de l’Active Directory, si no està ben definit o no funciona, l’invent se’n va a norris.

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

En aquest cas, establim els reenviadors de DNS cap a Internet (ISP):

Set-DNSServerForwarder -IPAddress $ReenviaDNS1,$ReenviaDNS2

Manies meves, modificar el registre del DNS perquè només apareguin els errors.

Set-DnsServerDiagnostics -EventLogLevel 1

Crear la zona de cerca inversa, que molts cops ens deixem, allotjada a l’Active Directory i que només permeti les actualitzacions segures:

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

Forçar el registre del servidor al DNS, tant la zona directa com la inversa:

Register-DNSClient

Fem una petita consulta ràpida per comprovar els registres de HOSTS dins el DNS, en cas d’aparèixer registres estranys (per exemple el nom del servidor anterior) convindria fer neteja:

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

 

Scripts per desplegar un domini d’Active Directory

Felicitats, ja tenim un Active Directory desplegat per PowerShell, però això “no mola”. Ho vull fer més ràpid! Creem l’script final ajuntant les comandes en tres parts, pels diferents reinicis que es necessiten:

 

Script de personalització de la màquina

Recordem que és el primer a executar amb la màquina pelada.

$nomservidor = "srvDC1"
$IP = "192.168.1.202"
$Mascara = 24
$Porta = "192.168.1.201"
$DNS = $IP

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

 

Script de configuració de l’Active Directory

Reiniciada la màquina després de parametritzar-la, es fa el desplegament i configuració del rol de Active Directory i DNS.

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

 

Script de parametrització de l’Active Directory

Activar la paperera de reciclatge i parametritzar el servei de DNS. També és cert, que aquest script es pot unir amb l’anterior en cas que utilitzem una sessió remota de PowerShell per llançar les comandes.

$dominiFQDN = "jmsolanes.local"
$dominiLDAP = ",DC=jmsolanes,DC=local"
$ReenviaDNS1 = "8.8.8.8" 
$ReenviaDNS2 = "8.8.4.4" 
$XarxaInversa = "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" + $dominiLDAP) -Scope ForestOrConfigurationSet -target $dominiFQDN -Confirm:$false
Set-DNSServerForwarder -IPAddress $ReenviaDNS1,$ReenviaDNS2 
Set-DnsServerDiagnostics -EventLogLevel 1 
Add-DNSServerPrimaryZone -NetworkId $XarxaInversa -ReplicationScope "Forest" -DynamicUpdate Secure -Confirm:$false 
Register-DNSClient

Ja tenim l’Active Directory completament operatiu, verge, això sí, però a punt per començar a crear coses que veurem en una altra entrada.

 

T’ha agradat l’article? El pots compartir a les xarxes socials. També pots deixar la teva opinió, comentari o suggeriment. Gràcies!

 

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *