Desplegar un domini d’Active Directory per PowerShell

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.
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.
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
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
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:
- Personalització de la màquina – 1_AD_personalitza.ps1
- Configuració de l’Active Directory – 2_AD_configura.ps1
- Parametrització – 3_AD_parametritza.ps1
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!
Similar Posts by The Author:
- Microsoft SQL Server con SMB3
- Microsoft SQL Server amb SMB3
- Containers en Linux
- Containers amb Linux
- Migrar el servidor de archivos a Windows Server 2019
- Migrar el servidor de fitxers a Windows Server 2019
- Puerta enlace a Azure en el Windows Admin Center
- Porta enllaç a Azure en el Windows Admin Center
- Hola mundo! WordPress 5 y Gutenberg
- Hola món! WordPress 5 i Gutenberg