Scripts PowerShell · SRV-DONMANOLO
Conjunto de scripts PowerShell ejecutados en el servidor central SRV-DONMANOLO
(Windows Server 2022 Standard sobre HPE ProLiant DL320 Gen11) para desplegar los roles del directorio
activo, configurar el dominio donmanolo.local, crear OUs y usuarios por área, aplicar GPOs,
publicar el sistema de archivos distribuido (DFS) y entregar direccionamiento dinámico a las VLANs vía DHCP.
Instalación de roles
Instala todos los roles necesarios del servidor en un solo comando: Active Directory Domain Services,
DNS, DHCP, IIS (Web Server), DFS
(Namespace y Replication) y File Server. La flag -IncludeManagementTools
instala además las consolas administrativas (RSAT) correspondientes.
Install-WindowsFeature -Name AD-Domain-Services, DNS, DHCP, Web-Server, FS-DFS-Namespace, FS-DFS-Replication, FileAndStorage-Services -IncludeManagementTools
Write-Host "✅ Roles instalados correctamente" -ForegroundColor Green
Promover a Domain Controller
Convierte el servidor en Domain Controller y crea el bosque de Active Directory con el dominio
donmanolo.local. Configura tanto el nivel funcional del bosque como del dominio en WinThreshold
(Windows Server 2016+), instala el rol DNS integrado y define la contraseña de DSRM (Directory Services Restore Mode).
Install-ADDSForest `
-DomainName "donmanolo.local" `
-DomainNetbiosName "DONMANOLO" `
-ForestMode "WinThreshold" `
-DomainMode "WinThreshold" `
-InstallDns:$true `
-SafeModeAdministratorPassword (ConvertTo-SecureString "Rutencio2026" -AsPlainText -Force) `
-Force:$true
192.168.1.100) y que su propio DNS
apunte a sí mismo antes de ejecutar este script.
Crear OUs, Grupos y Usuarios
Crea toda la estructura del Active Directory: unidades organizativas por área funcional
(Operarios, Capacitación, Administración, Soporte TI), grupos globales con prefijo
GG_ y usuarios de prueba para cada departamento. La contraseña inicial es
Rutencio2026 (deberán cambiarla al primer login en producción).
$domain = "DC=donmanolo,DC=local"
# OUs de Usuarios
New-ADOrganizationalUnit -Name "Usuarios" -Path $domain
New-ADOrganizationalUnit -Name "Operarios" -Path "OU=Usuarios,$domain"
New-ADOrganizationalUnit -Name "Capacitacion" -Path "OU=Usuarios,$domain"
New-ADOrganizationalUnit -Name "Administracion" -Path "OU=Usuarios,$domain"
New-ADOrganizationalUnit -Name "Soporte_TI" -Path "OU=Usuarios,$domain"
# OUs de Equipos
New-ADOrganizationalUnit -Name "Equipos" -Path $domain
New-ADOrganizationalUnit -Name "PCs_Operarios" -Path "OU=Equipos,$domain"
New-ADOrganizationalUnit -Name "PCs_Capacitacion" -Path "OU=Equipos,$domain"
New-ADOrganizationalUnit -Name "PCs_Admin" -Path "OU=Equipos,$domain"
New-ADOrganizationalUnit -Name "PCs_TI" -Path "OU=Equipos,$domain"
New-ADOrganizationalUnit -Name "Servidores" -Path "OU=Equipos,$domain"
New-ADOrganizationalUnit -Name "Grupos" -Path $domain
# Grupos Globales
New-ADGroup -Name "GG_Operarios" -GroupScope Global -Path "OU=Grupos,$domain"
New-ADGroup -Name "GG_Capacitacion" -GroupScope Global -Path "OU=Grupos,$domain"
New-ADGroup -Name "GG_Administracion" -GroupScope Global -Path "OU=Grupos,$domain"
New-ADGroup -Name "GG_Soporte_TI" -GroupScope Global -Path "OU=Grupos,$domain"
New-ADGroup -Name "GG_Admins_Dominio" -GroupScope Global -Path "OU=Grupos,$domain"
# Usuarios de prueba
$pass = ConvertTo-SecureString "Rutencio2026" -AsPlainText -Force
# Operarios
1..5 | ForEach-Object {
New-ADUser -Name "operario$_" -SamAccountName "operario$_" -UserPrincipalName "operario$_@donmanolo.local" -Path "OU=Operarios,OU=Usuarios,$domain" -AccountPassword $pass -Enabled $true
Add-ADGroupMember -Identity "GG_Operarios" -Members "operario$_"
Write-Host "✅ operario$_ creado" -ForegroundColor Cyan
}
# Capacitacion
1..3 | ForEach-Object {
New-ADUser -Name "capacitacion$_" -SamAccountName "capacitacion$_" -UserPrincipalName "capacitacion$_@donmanolo.local" -Path "OU=Capacitacion,OU=Usuarios,$domain" -AccountPassword $pass -Enabled $true
Add-ADGroupMember -Identity "GG_Capacitacion" -Members "capacitacion$_"
Write-Host "✅ capacitacion$_ creado" -ForegroundColor Cyan
}
# Administracion
1..3 | ForEach-Object {
New-ADUser -Name "admin$_" -SamAccountName "admin$_" -UserPrincipalName "admin$_@donmanolo.local" -Path "OU=Administracion,OU=Usuarios,$domain" -AccountPassword $pass -Enabled $true
Add-ADGroupMember -Identity "GG_Administracion" -Members "admin$_"
Write-Host "✅ admin$_ creado" -ForegroundColor Cyan
}
# Soporte TI
1..2 | ForEach-Object {
New-ADUser -Name "ti$_" -SamAccountName "ti$_" -UserPrincipalName "ti$_@donmanolo.local" -Path "OU=Soporte_TI,OU=Usuarios,$domain" -AccountPassword $pass -Enabled $true
Add-ADGroupMember -Identity "GG_Soporte_TI" -Members "ti$_"
Write-Host "✅ ti$_ creado" -ForegroundColor Cyan
}
Write-Host "✅ Todos los usuarios creados" -ForegroundColor Green
Crear y linkear GPOs
Crea las políticas de grupo (GPOs) para cada OU y las vincula. Los operarios
no pueden acceder al Panel de Control ni a unidades USB (clave de registro NoDrives con bitmask
67108863 que bloquea las letras A–Z). Las áreas administrativas y de soporte TI quedan habilitadas
explícitamente.
$domain = "donmanolo.local"
# GPO Operarios
$gpo1 = New-GPO -Name "GPO_Operarios"
Set-GPRegistryValue -Name "GPO_Operarios" -Key "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" -ValueName "NoDrives" -Type DWord -Value 67108863
Set-GPRegistryValue -Name "GPO_Operarios" -Key "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" -ValueName "NoControlPanel" -Type DWord -Value 1
New-GPLink -Name "GPO_Operarios" -Target "OU=Operarios,OU=Usuarios,DC=donmanolo,DC=local"
# GPO Capacitacion
$gpo2 = New-GPO -Name "GPO_Capacitacion"
Set-GPRegistryValue -Name "GPO_Capacitacion" -Key "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" -ValueName "NoControlPanel" -Type DWord -Value 1
New-GPLink -Name "GPO_Capacitacion" -Target "OU=Capacitacion,OU=Usuarios,DC=donmanolo,DC=local"
# GPO Administracion
$gpo3 = New-GPO -Name "GPO_Administracion"
Set-GPRegistryValue -Name "GPO_Administracion" -Key "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" -ValueName "NoControlPanel" -Type DWord -Value 0
New-GPLink -Name "GPO_Administracion" -Target "OU=Administracion,OU=Usuarios,DC=donmanolo,DC=local"
# GPO Soporte TI
$gpo4 = New-GPO -Name "GPO_Soporte_TI"
Set-GPRegistryValue -Name "GPO_Soporte_TI" -Key "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" -ValueName "NoControlPanel" -Type DWord -Value 0
New-GPLink -Name "GPO_Soporte_TI" -Target "OU=Soporte_TI,OU=Usuarios,DC=donmanolo,DC=local"
Write-Host "✅ GPOs creadas y linkeadas" -ForegroundColor Green
Crear carpetas DFS con permisos NTFS
Crea las carpetas compartidas del servidor de archivos, las publica como shares SMB y aplica
permisos NTFS según el grupo de AD de cada área. Los operarios tienen solo lectura,
capacitación y administración pueden modificar, soporte TI y gerencia tienen control total, y la carpeta
Compartido es accesible para todos los usuarios del dominio.
# Crear carpetas base y compartir
$carpetas = @("Operarios","Capacitacion","Administracion","Soporte_TI","Gerencia","Compartido")
foreach ($c in $carpetas) {
New-Item -Path "C:\DFS\$c" -ItemType Directory -Force
New-SmbShare -Name $c -Path "C:\DFS\$c" -FullAccess "DONMANOLO\Admins. del dominio"
Write-Host "✅ $c creado y compartido" -ForegroundColor Cyan
}
# Permisos NTFS por grupo
$permisos = @{
"Operarios" = @{grupo="GG_Operarios"; acceso="ReadAndExecute"}
"Capacitacion" = @{grupo="GG_Capacitacion"; acceso="Modify"}
"Administracion"= @{grupo="GG_Administracion"; acceso="Modify"}
"Soporte_TI" = @{grupo="GG_Soporte_TI"; acceso="FullControl"}
"Gerencia" = @{grupo="GG_Admins_Dominio"; acceso="FullControl"}
"Compartido" = @{grupo="Usuarios del dominio"; acceso="Modify"}
}
foreach ($carpeta in $permisos.Keys) {
$path = "C:\DFS\$carpeta"
$grupo = "DONMANOLO\" + $permisos[$carpeta].grupo
$acceso = $permisos[$carpeta].acceso
$acl = Get-Acl $path
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($grupo,$acceso,"ContainerInherit,ObjectInherit","None","Allow")
$acl.AddAccessRule($rule)
Set-Acl $path $acl
Write-Host "✅ Permisos $acceso aplicados a $carpeta" -ForegroundColor Cyan
}
# Permisos SMB para acceso de usuarios de dominio
Grant-SmbShareAccess -Name "Operarios" -AccountName "DONMANOLO\GG_Operarios" -AccessRight Change -Force
Write-Host "✅ DFS completo" -ForegroundColor Green
Configurar DHCP Scopes por VLAN
Autoriza el servidor DHCP en Active Directory y crea los scopes correspondientes a cada
VLAN del proyecto según el direccionamiento VLSM definido: Operarios (VLAN 10),
WLAN_REPO (VLAN 20), Capacitación (VLAN 50) y la pool de servidores (VLAN 70). Cada scope incluye gateway
y servidor DNS apuntando al propio SRV-DONMANOLO.
# Autorizar servidor DHCP en AD
Add-DhcpServerInDC -DnsName "SRV-DONMANOLO.donmanolo.local" -IPAddress 192.168.1.100
# OPERARIOS — VLAN 10 (192.168.0.0/25)
Add-DhcpServerv4Scope -Name "OPERARIOS" -StartRange 192.168.0.10 -EndRange 192.168.0.126 -SubnetMask 255.255.255.128 -State Active
Set-DhcpServerv4OptionValue -ScopeId 192.168.0.0 -Router 192.168.0.1 -DnsServer 192.168.1.100 -Force
# WLAN_REPO — VLAN 20 (192.168.1.0/25)
Add-DhcpServerv4Scope -Name "WLAN_REPO" -StartRange 192.168.1.10 -EndRange 192.168.1.126 -SubnetMask 255.255.255.128 -State Active
Set-DhcpServerv4OptionValue -ScopeId 192.168.1.0 -Router 192.168.1.1 -DnsServer 192.168.1.100 -Force
# CAPACITACION — VLAN 50 (192.168.1.192/28)
Add-DhcpServerv4Scope -Name "CAPACITACION" -StartRange 192.168.1.194 -EndRange 192.168.1.206 -SubnetMask 255.255.255.240 -State Active
Set-DhcpServerv4OptionValue -ScopeId 192.168.1.192 -Router 192.168.1.193 -DnsServer 192.168.1.100 -Force
# serverPool — VLAN 70 Servidores (192.168.2.0/23)
Add-DhcpServerv4Scope -Name "serverPool" -StartRange 192.168.2.1 -EndRange 192.168.3.254 -SubnetMask 255.255.254.0 -State Active
Set-DhcpServerv4OptionValue -ScopeId 192.168.2.0 -Router 192.168.2.1 -DnsServer 192.168.1.100 -Force
Write-Host "✅ DHCP Scopes configurados" -ForegroundColor Green