Windows Server
2025
La guía técnica más completa para instalación, configuración avanzada, Active Directory, seguridad zero-trust, Hyper-V, Azure Arc, SDN y mantenimiento preventivo en entornos empresariales modernos.
🆕
00 · Introducción
Novedades y Mejoras vs. WS2022
Active Directory 2025, SMB sobre QUIC, Hotpatch sin reinicio, SDN nativo y seguridad avanzada.
Referencia
▼
Novedades y Mejoras vs. WS2022
Active Directory 2025, SMB sobre QUIC, Hotpatch sin reinicio, SDN nativo y seguridad avanzada.
Active Directory 2025
Nuevo nivel funcional de bosque y dominio. Soporte nativo para grupos de hasta 10.000 miembros sin degradación de rendimiento. Delegación constrained mejorada.
SMB sobre QUIC
Acceso a carpetas compartidas sin VPN a través de Internet, cifrado TLS 1.3 end-to-end sobre el protocolo QUIC. Ideal para trabajadores remotos y sucursales.
Hotpatch sin reinicio
Aplicar parches de seguridad críticos sin reiniciar el servidor (Azure Edition). Reduce ventanas de mantenimiento y tiempo de inactividad en producción.
Secured-Core mejorado
DRTM (Dynamic Root of Trust for Measurement), HVCI habilitado por defecto, protección de firmware y arranque medido integrados en la instalación base.
SDN nativo
Software Defined Networking integrado en Datacenter. Redes virtuales, microsegmentación y balanceadores de carga software sin hardware adicional.
Contenedores Gen 2
Imágenes Windows Server Core 2025 un 40% más pequeñas. Soporte para eBPF en Windows para visibilidad de red avanzada en contenedores Kubernetes.
Storage Replica v2
Replicación síncrona y asíncrona mejorada entre volúmenes o servidores. Failover más rápido y menor RPO/RTO para datos críticos.
Windows LAPS moderno
LAPS nativo en AD 2025 sin extensión adicional. Rotación automática de contraseñas de administrador local, backup en Azure AD o AD on-premises.
Comparativa de ediciones WS2025
| Característica | Essentials | Standard | Datacenter | Azure Edition |
|---|---|---|---|---|
| Licencia | 25 usuarios / 50 dispositivos | 2 VMs / 16 cores | VMs ilimitadas | Azure Arc / Azure |
| Hyper-V VMs | ❌ | 2 VMs | ✅ Ilimitadas | ✅ Ilimitadas |
| Storage Spaces Direct | ❌ | ❌ | ✅ | ✅ |
| SMB sobre QUIC | ❌ | Clientes | ✅ Server | ✅ Server |
| Hotpatch sin reinicio | ❌ | ❌ | ❌ | ✅ |
| SDN (HNV) | ❌ | ❌ | ✅ | ✅ |
| AD Forest Level 2025 | ✅ | ✅ | ✅ | ✅ |
| Windows LAPS nativo | ✅ | ✅ | ✅ | ✅ |
📋
01 · Pre-instalación
Requisitos de Hardware y Lista de Verificación
Hardware mínimo y recomendado por edición, TPM 2.0, Secure Boot, y checklist completo pre-instalación.
Básico
▼
Requisitos de Hardware y Lista de Verificación
Hardware mínimo y recomendado por edición, TPM 2.0, Secure Boot, y checklist completo pre-instalación.
CPU
RAM
Disco Sistema
Red
TPM
UEFI
Lista de verificación previa
- BIOS/UEFI actualizado — Verifica y actualiza al firmware más reciente estable del fabricante del servidor.
- UEFI activado + CSM deshabilitado — Imprescindible para GPT, Secure Boot y TPM 2.0.
- Secure Boot habilitado — WS2025 lo requiere para Secured-Core. Verifica en BIOS → Security → Secure Boot → Enabled.
- TPM 2.0 habilitado y activo — BIOS → Security → TPM → Enabled. Confirma con
tpm.msctras instalar. - HVCI compatible — Verifica en el fabricante que el CPU y chipset soportan Virtualization-Based Security (VT-x + VT-d).
- Drivers de NIC/RAID/Almacenamiento descargados — Del fabricante del servidor en USB separado.
- IP estática planificada — IP, máscara de subred, puerta de enlace, DNS primario/secundario.
- Nombre del servidor decidido — Máx. 15 caracteres, sin espacios:
SRV-DC-01,SRV-FS-01. - Dominio definido — Ej:
empresa.locaload.empresa.com. Anota la contraseña DSRM. - Licencia disponible — Clave MAK, KMS, suscripción MPSA o Azure Hybrid Benefit.
- Backup completo de sistemas existentes — Antes de cualquier migración desde WS2019/2022.
- USB booteable preparado — Rufus 4.x con esquema GPT + UEFI.
Crear USB booteable y verificar ISO
# Verificar integridad del ISO antes de instalar
Get-FileHash "C:\Downloads\WindowsServer2025.iso" -Algorithm SHA256 | Format-List
# Comparar con el hash oficial de Microsoft Volume Licensing Center
# Rufus — configuración recomendada para WS2025:
# Esquema de partición: GPT
# Sistema destino: UEFI (no CSM)
# Sistema archivos: NTFS
# Tamaño del clúster: 4096 bytes
# Descargar Rufus: https://rufus.ie
💿
02 · Instalación
Instalación Paso a Paso — GUI, Server Core y LTSC
Proceso completo, particionado recomendado con múltiples discos, elección de edición y activación.
Intermedio
▼
Instalación Paso a Paso — GUI, Server Core y LTSC
Proceso completo, particionado recomendado con múltiples discos, elección de edición y activación.
GUI vs. Server Core vs. Azure Core
🖥️ Desktop Experience
- GUI completa, Server Manager, MMC
- Ideal: DC principal, servidores de archivo, RDS
- Mayor consumo RAM (+1 GB)
- Mayor superficie de ataque
⌨️ Server Core
- Solo CLI + PowerShell local
- Ideal: Hyper-V host, DC secundario, web
- Menor footprint, menos parches
- Administración remota via RSAT/WinRM
☁️ Azure Core Edition
- Optimizado para Azure Arc
- Hotpatch sin reinicio
- Telemetría Azure nativa
- Solo disponible en Azure o Arc
Particionado recomendado — Servidor de producción
╔═════════════════════════════════════════════════════════════╗
║ Servidor con 2 SSDs NVMe (120 GB SO + 2 TB Datos) ║
╚═════════════════════════════════════════════════════════════╝
── DISCO 0 — SSD NVMe 120 GB (Solo sistema operativo) ──────
Partición EFI: 300 MB → Auto (Setup)
Partición MSR: 16 MB → Auto (Setup)
Partición C:\: 80 GB → Windows Server 2025
Partición Recup: 984 MB → Auto (Setup)
── DISCO 1 — SSD/HDD 2 TB (Datos empresariales) ────────────
Partición D:\: 100 GB → AD DS (NTDS, SYSVOL, logs)
Partición E:\: 1.2 TB → Carpetas compartidas / DFS
Partición F:\: 700 GB → Backups locales WSB
REGLA CRÍTICA: Nunca almacenes NTDS ni datos en C:\
Si reinstalaas el SO, el dominio queda intacto en D:\Post-instalación — Activación y verificación
:: Verificar edición e información del SO
winver
wmic os get Caption, Version, BuildNumber, OSArchitecture
:: Estado de activación
slmgr /dli
slmgr /dlv
:: Introducir clave de producto y activar online
slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
slmgr /ato
:: Activar con servidor KMS corporativo
slmgr /skms kms-server.empresa.local:1688
slmgr /ato
:: Convertir Server Core a Desktop Experience (necesita media)
powershell Install-WindowsFeature Server-Gui-Shell,Server-Gui-Mgmt-Infra -Source D:\Sources\SxS -Restart
:: Quitar GUI (pasar a Server Core — más seguro)
powershell Uninstall-WindowsFeature Server-Gui-Shell,Server-Gui-Mgmt-Infra -Restart
🔧
03 · Post-instalación
Configuración Inicial — SConfig, NTP y Roles Base
Nombre del servidor, SConfig, zona horaria, NTP, RSAT, política de contraseñas y hardening básico.
Intermedio
▼
Configuración Inicial — SConfig, NTP y Roles Base
Nombre del servidor, SConfig, zona horaria, NTP, RSAT, política de contraseñas y hardening básico.
SConfig — Configuración interactiva inicial
:: Abrir SConfig (esencial en Server Core)
SConfig
1 → Unir al dominio / grupo de trabajo
2 → Cambiar nombre del servidor
4 → Habilitar / deshabilitar Escritorio Remoto
5 → Configurar Windows Update (Automático / Manual)
6 → Descargar e instalar actualizaciones
8 → Configuración de red (IP estática)
9 → Fecha, hora y zona horaria
11 → Telemetría de Windows
14 → Salir a PowerShell
15 → Reiniciar el servidorNombre, zona horaria y NTP
# Cambiar nombre del servidor y reiniciar
Rename-Computer -NewName "SRV-DC-01" -Force -Restart
# Configurar zona horaria
Set-TimeZone -Id "Romance Standard Time" # España peninsular
Set-TimeZone -Id "Central European Standard Time" # CET (Alemania, Francia)
Set-TimeZone -Id "UTC" # UTC para DCs
# Listar zonas disponibles
Get-TimeZone -ListAvailable | Where-Object {$_.Id -like "*Europe*"}
# Configurar NTP con pool público de España
w32tm /config /syncfromflags:manual /manualpeerlist:"0.es.pool.ntp.org 1.es.pool.ntp.org 2.es.pool.ntp.org" /reliable:YES /update
net stop w32time && net start w32time
w32tm /resync /force
w32tm /query /statusInstalar RSAT y herramientas de gestión
# Instalar todas las herramientas RSAT
Install-WindowsFeature RSAT -IncludeAllSubFeature -IncludeManagementTools
# O instalar individualmente solo lo necesario
Install-WindowsFeature RSAT-AD-Tools # Usuarios y equipos de AD
Install-WindowsFeature RSAT-DNS-Server # Administrador DNS
Install-WindowsFeature RSAT-DHCP # Administrador DHCP
Install-WindowsFeature GPMC # Consola de directiva de grupo
Install-WindowsFeature RSAT-Hyper-V-Tools # Administrador Hyper-V
Install-WindowsFeature RSAT-File-Services # Servicios de archivo y almacenamiento
Install-WindowsFeature WindowsAdminCenter # WAC (nuevo en WS2025)
# Ver roles instalados
Get-WindowsFeature | Where-Object {$_.InstallState -eq "Installed"} |
Format-Table Name, DisplayName -AutoSizePolítica de contraseñas y seguridad inicial
:: Política de contraseñas robusta
net accounts /minpwlen:14 /maxpwage:90 /minpwage:1 /uniquepw:12
:: Bloqueo: 5 intentos → 30 min bloqueo
net accounts /lockoutthreshold:5 /lockoutduration:30 /lockoutwindow:30
:: Renombrar cuenta Administrador (dificulta ataques de fuerza bruta)
wmic useraccount where name='Administrator' rename 'SrvAdm2025'
:: Crear cuenta admin de respaldo con nombre no obvio
net user "BkpSrvAdmin" "C0mpl3x!B@ck2025" /add /passwordchg:no /expires:never
net localgroup Administrators "BkpSrvAdmin" /add
:: Deshabilitar cuenta Guest
net user Guest /active:no
:: Abrir editor de directivas de seguridad local
secpol.msc
🌐
04 · Networking
Red — IP Estática, DNS, DHCP, NIC Teaming y SMB/QUIC
Configuración completa de red incluyendo SMB sobre QUIC (novedad WS2025), NIC Teaming y DoH.
Intermedio
▼
Red — IP Estática, DNS, DHCP, NIC Teaming y SMB/QUIC
Configuración completa de red incluyendo SMB sobre QUIC (novedad WS2025), NIC Teaming y DoH.
Configurar IP estática
# Ver adaptadores de red
Get-NetAdapter | Select-Object Name, InterfaceIndex, Status, LinkSpeed, MacAddress
# Eliminar configuración DHCP existente
Remove-NetIPAddress -InterfaceAlias "Ethernet" -Confirm:$false -ErrorAction SilentlyContinue
Remove-NetRoute -InterfaceAlias "Ethernet" -Confirm:$false -ErrorAction SilentlyContinue
# Asignar IP estática
New-NetIPAddress `
-InterfaceAlias "Ethernet" `
-IPAddress "192.168.1.10" `
-PrefixLength 24 `
-DefaultGateway "192.168.1.1"
# DNS: sí mismo primario (DC), externo de respaldo
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" `
-ServerAddresses "192.168.1.10", "1.1.1.1"
# Deshabilitar IPv6 si no se usa
Disable-NetAdapterBinding -Name "Ethernet" -ComponentID ms_tcpip6
# Verificar configuración final
Get-NetIPConfigurationSMB sobre QUIC — Novedad WS2025 (Datacenter)
# SMB sobre QUIC permite acceso a carpetas compartidas vía Internet
# sin VPN, con TLS 1.3 end-to-end. Solo disponible en Datacenter y Azure Ed.
# Habilitar SMB sobre QUIC en el servidor
Enable-SmbServerNetworkInterface -InterfaceAlias "Ethernet" -TransportProtocol QUIC
# Configurar certificado TLS para QUIC (requiere cert válido)
New-SmbServerCertificateMapping `
-Name "QUICSMBCert" `
-Thumbprint "AAABBB..." `
-StoreName "My" `
-Subject "servidor.empresa.com"
# Conectar desde cliente Windows 11 / WS2025 via QUIC
net use Z: \\servidor.empresa.com\Compartido /transport:quic /persistent:yes
# Verificar configuración SMB
Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol, EnableSMBCompression, EnableQuicNIC Teaming y DHCP
# NIC Teaming (LACP con balanceo dinámico)
New-NetLbfoTeam -Name "Team-Prod" `
-TeamMembers "Ethernet","Ethernet 2" `
-TeamingMode LACP `
-LoadBalancingAlgorithm Dynamic
# Instalar y autorizar servidor DHCP
Install-WindowsFeature DHCP -IncludeManagementTools
Add-DhcpServerInDC
# Crear scope DHCP
Add-DhcpServerv4Scope -Name "Red Corporativa" `
-StartRange "192.168.1.100" `
-EndRange "192.168.1.200" `
-SubnetMask "255.255.255.0" `
-LeaseDuration (New-TimeSpan -Hours 8) `
-State Active
# Opciones de scope
Set-DhcpServerv4OptionValue -ScopeId "192.168.1.0" `
-Router "192.168.1.1" `
-DnsServer "192.168.1.10" `
-DnsDomain "empresa.local"
# Excluir IPs de infraestructura estática (1-99)
Add-DhcpServerv4ExclusionRange -ScopeId "192.168.1.0" `
-StartRange "192.168.1.1" `
-EndRange "192.168.1.99"
🗄️
05 · Active Directory Domain Services 2025
Active Directory 2025 — Forest Level, OUs y Replicación
Nuevo nivel funcional 2025, instalación del bosque, estructura de OUs, GPOs, FSMO y DC secundario.
Avanzado
▼
Active Directory 2025 — Forest Level, OUs y Replicación
Nuevo nivel funcional 2025, instalación del bosque, estructura de OUs, GPOs, FSMO y DC secundario.
Windows Server 2025 introduce el nivel funcional 10 (WS2025). Habilita soporte nativo para grupos con más de 10.000 miembros sin impacto en rendimiento, autenticación Kerberos mejorada y delegación Kerberos constrained basada en recursos desde Azure AD.
Instalar primer controlador de dominio
# Paso 1: Instalar el rol AD DS + herramientas
Install-WindowsFeature AD-Domain-Services, DNS -IncludeManagementTools
# Paso 2: Promover a primer DC del bosque con nivel funcional WS2025
Install-ADDSForest `
-DomainName "empresa.local" `
-DomainNetbiosName "EMPRESA" `
-ForestMode WS2025 `
-DomainMode WS2025 `
-DatabasePath "D:\NTDS" `
-LogPath "D:\NTDS\Logs" `
-SysvolPath "D:\SYSVOL" `
-SafeModeAdministratorPassword `
(ConvertTo-SecureString "D$RM@S3cur3_2025!" -AsPlainText -Force) `
-InstallDns -Force
# El servidor se reinicia automáticamente tras promover
# Promover DC secundario a dominio existente
Install-ADDSDomainController `
-DomainName "empresa.local" `
-Credential (Get-Credential "empresa\Administrator") `
-DatabasePath "D:\NTDS" `
-LogPath "D:\NTDS\Logs" `
-SysvolPath "D:\SYSVOL" `
-InstallDns -ForceEstructura de OUs — Diseño corporativo
# Crear jerarquía completa de OUs
$dn = "DC=empresa,DC=local"
New-ADOrganizationalUnit -Name "EMPRESA" -Path $dn -ProtectedFromAccidentalDeletion $true
$r = "OU=EMPRESA,$dn"
# OUs de primer nivel
@("Usuarios","Equipos","Grupos","Servidores","Cuentas Servicio","Deshabilitados") |
ForEach-Object { New-ADOrganizationalUnit -Name $_ -Path $r -ProtectedFromAccidentalDeletion $true }
# Sub-OUs de usuarios por departamento
$uOU = "OU=Usuarios,$r"
@("Dirección","TI","Ventas","Contabilidad","RRHH","Operaciones") |
ForEach-Object { New-ADOrganizationalUnit -Name $_ -Path $uOU }
# Sub-OUs de equipos
$eOU = "OU=Equipos,$r"
@("Portátiles","Escritorio","Quioscos") |
ForEach-Object { New-ADOrganizationalUnit -Name $_ -Path $eOU }
# Elevar nivel funcional del dominio/bosque a WS2025 (si venías de WS2022)
Set-ADDomainMode -Identity "empresa.local" -DomainMode Windows2025Domain
Set-ADForestMode -Identity "empresa.local" -ForestMode Windows2025ForestGPOs, diagnóstico y FSMO
:: Diagnóstico completo del DC
dcdiag /test:all /v /f:C:\Logs\dcdiag.txt
:: Estado de replicación
repadmin /replsummary
repadmin /showrepl * /errorsonly
:: Ver roles FSMO actuales
netdom query fsmo
:: Forzar replicación AD inmediata
repadmin /syncall /AdeP
:: Forzar actualización de directivas en todos los equipos del dominio
powershell -c "Get-ADComputer -Filter * | ForEach-Object { Invoke-GPUpdate -Computer $_.Name -Force -ErrorAction SilentlyContinue }"
:: Abrir consola de GPO
gpmc.msc
:: Generar informe de directivas aplicadas al equipo local
gpresult /h C:\Logs\gpresult.html /f
👤
06 · Gestión de Usuarios, Grupos y LAPS
Usuarios, Grupos, FGPP y Windows LAPS nativo
CRUD de usuarios AD, grupos de seguridad, FGPP, importación CSV y Windows LAPS 2025 (sin extensión).
Intermedio
▼
Usuarios, Grupos, FGPP y Windows LAPS nativo
CRUD de usuarios AD, grupos de seguridad, FGPP, importación CSV y Windows LAPS 2025 (sin extensión).
# Crear usuario con atributos completos
New-ADUser `
-Name "Ana Torres" `
-SamAccountName "atorres" `
-UserPrincipalName "atorres@empresa.local" `
-GivenName "Ana" `
-Surname "Torres" `
-DisplayName "Ana Torres" `
-Department "Tecnología" `
-Title "Ingeniera de Sistemas" `
-Path "OU=TI,OU=Usuarios,OU=EMPRESA,DC=empresa,DC=local" `
-AccountPassword (ConvertTo-SecureString "T3mpP@ss2025!" -AsPlainText -Force) `
-Enabled $true -ChangePasswordAtLogon $true
# Operaciones frecuentes
Disable-ADAccount -Identity "atorres"
Enable-ADAccount -Identity "atorres"
Unlock-ADAccount -Identity "atorres"
Remove-ADUser -Identity "atorres" -Confirm:$false
Set-ADAccountPassword -Identity "atorres" `
-NewPassword (ConvertTo-SecureString "NuevoP@ss2025!" -AsPlainText -Force) -Reset
# Usuarios inactivos: sin login en 90 días
$d90 = (Get-Date).AddDays(-90)
Get-ADUser -Filter {LastLogonDate -lt $d90 -and Enabled -eq $true} `
-Properties LastLogonDate | Select-Object Name, SamAccountName, LastLogonDate
# Importar usuarios desde CSV
# CSV: Name,Sam,Department,Title,Path,Password
Import-Csv "C:\Admin\nuevos-usuarios.csv" | ForEach-Object {
New-ADUser -Name $_.Name -SamAccountName $_.Sam `
-Department $_.Department -Title $_.Title -Path $_.Path `
-AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -Force) `
-Enabled $true -ChangePasswordAtLogon $true
Write-Host "✓ $($_.Name)" -ForegroundColor Green
}Windows LAPS 2025 — Gestión de contraseñas locales
# Windows LAPS está integrado nativamente en WS2025 + AD 2025
# Sin necesidad de instalar extensiones adicionales como en versiones anteriores
# Actualizar esquema AD para LAPS 2025
Update-LapsADSchema
# Configurar permisos LAPS en la OU de equipos
Set-LapsADComputerSelfPermission -Identity "OU=Equipos,OU=EMPRESA,DC=empresa,DC=local"
# Configurar LAPS vía GPO (objeto: Computer → Administrative Templates → LAPS)
# O directamente en PowerShell:
New-LapsGpoScript -GpoName "POL-LAPS-Equipos" `
-PasswordLength 20 `
-PasswordComplexity Large `
-PasswordExpirationAge 30 `
-BackupDirectory ActiveDirectory
# Leer contraseña LAPS de un equipo (solo Admins)
Get-LapsADPassword -Identity "PC-USUARIO01" -AsPlainText
# Forzar rotación inmediata de contraseña LAPS
Reset-LapsPassword -Identity "PC-USUARIO01"
# Ver historial de contraseñas LAPS (nuevas en WS2025)
Get-LapsADPassword -Identity "PC-USUARIO01" -IncludeHistory
📁
07 · File & Storage Services
Almacenamiento — DFS, SMB Comprimido, Cuotas y Storage Replica
Carpetas compartidas SMB 3.1.1, DFS Namespace, cuotas FSRM y Storage Replica para HA.
Intermedio
▼
Almacenamiento — DFS, SMB Comprimido, Cuotas y Storage Replica
Carpetas compartidas SMB 3.1.1, DFS Namespace, cuotas FSRM y Storage Replica para HA.
# Deshabilitar SMBv1 (crítico de seguridad)
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Confirm:$false
# Habilitar compresión SMB y cifrado
Set-SmbServerConfiguration `
-EnableSMBCompression $true `
-EncryptData $true `
-Confirm:$false
# Crear estructura de directorios en E:\
$dirs = @("E:\Empresa\General","E:\Empresa\Proyectos",
"E:\Departamentos\TI","E:\Departamentos\RRHH",
"E:\Departamentos\Contabilidad","E:\Usuarios")
$dirs | ForEach-Object { New-Item -Path $_ -ItemType Directory -Force }
# Compartir carpeta con enumeración de acceso (ABE)
New-SmbShare -Name "Empresa" `
-Path "E:\Empresa" `
-FullAccess "EMPRESA\Domain Admins" `
-ChangeAccess "EMPRESA\Domain Users" `
-FolderEnumerationMode AccessBased `
-Description "Documentación corporativa" `
-CachingMode None
# Permisos NTFS con icacls (herramienta más precisa)
icacls "E:\Departamentos\RRHH" /inheritance:r
icacls "E:\Departamentos\RRHH" /grant "EMPRESA\GRP-RRHH:(OI)(CI)M" /T
icacls "E:\Departamentos\RRHH" /grant "EMPRESA\Domain Admins:(OI)(CI)F" /T
# Configurar carpeta home por usuario
Get-ADUser -Filter * | ForEach-Object {
$path = "E:\Usuarios\$($_.SamAccountName)"
New-Item -Path $path -ItemType Directory -Force
Set-ADUser $_ -HomeDirectory "\\SRV-FS-01\Usuarios\$($_.SamAccountName)" -HomeDrive H:
}Storage Replica — Replicación entre servidores (Datacenter)
# Instalar rol Storage Replica (requiere Datacenter)
Install-WindowsFeature Storage-Replica -IncludeManagementTools
# Comprobar si el hardware cumple requisitos
Test-SRTopology `
-SourceComputerName "SRV-FS-01" `
-SourceVolumeName "E:" `
-SourceLogVolumeName "L:" `
-DestinationComputerName "SRV-FS-02" `
-DestinationVolumeName "E:" `
-DestinationLogVolumeName "L:" `
-DurationInMinutes 1 -ResultPath "C:\SR-Test"
# Crear replicación síncrona (RPO = 0, requiere baja latencia)
New-SRPartnership `
-SourceComputerName "SRV-FS-01" `
-SourceRGName "RG-Origen" `
-SourceVolumeName "E:" `
-SourceLogVolumeName "L:" `
-DestinationComputerName "SRV-FS-02" `
-DestinationRGName "RG-Destino" `
-DestinationVolumeName "E:" `
-DestinationLogVolumeName "L:"
# Ver estado de replicación
Get-SRGroup
Get-SRPartnership
🖥️
08 · Hyper-V
Hyper-V — VMs, vSwitches, Réplica y Live Migration
Instalación de Hyper-V, creación y gestión de VMs, Virtual Switches, Hyper-V Replica y migración en vivo.
Avanzado
▼
Hyper-V — VMs, vSwitches, Réplica y Live Migration
Instalación de Hyper-V, creación y gestión de VMs, Virtual Switches, Hyper-V Replica y migración en vivo.
# Instalar Hyper-V
Install-WindowsFeature Hyper-V -IncludeManagementTools -Restart
# Configurar ruta por defecto para VMs y VHDs
Set-VMHost `
-VirtualMachinePath "D:\HyperV\VMs" `
-VirtualHardDiskPath "D:\HyperV\VHDs"
# Crear Virtual Switches
New-VMSwitch -Name "vSwitch-Externo" `
-NetAdapterName "Team-Prod" `
-AllowManagementOS $true
New-VMSwitch -Name "vSwitch-Interno" -SwitchType Internal
New-VMSwitch -Name "vSwitch-Privado" -SwitchType Private
# Crear VM con Generación 2, vTPM y Secure Boot
New-VM -Name "VM-WebSrv-01" `
-MemoryStartupBytes 4GB `
-Generation 2 `
-NewVHDPath "D:\HyperV\VHDs\VM-WebSrv-01.vhdx" `
-NewVHDSizeBytes 80GB `
-SwitchName "vSwitch-Externo"
# Configurar la VM: CPU, RAM dinámica, vTPM
Set-VM -Name "VM-WebSrv-01" `
-ProcessorCount 4 `
-DynamicMemory `
-MemoryMinimumBytes 1GB `
-MemoryMaximumBytes 8GB
# Añadir vTPM (para Secure Boot del invitado)
Enable-VMTPM -VMName "VM-WebSrv-01"
# Iniciar VM y conectar con ISO
Add-VMDvdDrive -VMName "VM-WebSrv-01" -Path "D:\ISOs\WS2025.iso"
Start-VM -Name "VM-WebSrv-01"
vmconnect.exe localhost "VM-WebSrv-01"
# Ver estado de todas las VMs
Get-VM | Select-Object Name, State, CPUUsage, MemoryAssigned, Uptime | Format-Table -AutoSize
# Crear snapshot / checkpoint
Checkpoint-VM -Name "VM-WebSrv-01" -SnapshotName "Antes-de-actualización-$(Get-Date -f 'yyyyMMdd')"
# Configurar Hyper-V Replica (DR básico)
Set-VMReplication -VMName "VM-WebSrv-01" `
-ReplicaServerName "SRV-HV-REPLICA" `
-ReplicaServerPort 443 `
-AuthenticationType Certificate `
-ReplicationFrequencySec 300
Enable-VMReplication -VMName "VM-WebSrv-01"
Start-VMInitialReplication -VMName "VM-WebSrv-01"
🔒
09 · Security Hardening Avanzado
Secured-Core, Zero-Trust, Defender y Auditoría
HVCI, Credential Guard, BitLocker, auditería avanzada, deshabilitar protocolos inseguros y baseline de seguridad.
Avanzado
▼
Secured-Core, Zero-Trust, Defender y Auditoría
HVCI, Credential Guard, BitLocker, auditería avanzada, deshabilitar protocolos inseguros y baseline de seguridad.
Verificar y activar Secured-Core Server
# Verificar Secure Boot
Confirm-SecureBootUEFI
# Verificar estado de VBS y HVCI
Get-WmiObject -Namespace "root\Microsoft\Windows\DeviceGuard" `
-Class Win32_DeviceGuard |
Select-Object VirtualizationBasedSecurityStatus, SecurityServicesRunning, HypervisorEnforcedCodeIntegrityStatus
# Habilitar HVCI (Hypervisor-Protected Code Integrity) vía registro
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v EnableVirtualizationBasedSecurity /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v RequirePlatformSecurityFeatures /t REG_DWORD /d 3 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard" /v HypervisorEnforcedCodeIntegrity /t REG_DWORD /d 1 /f
# Habilitar Credential Guard
reg add "HKLM\SYSTEM\CurrentControlSet\Control\LSA" /v LsaCfgFlags /t REG_DWORD /d 1 /f
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard" /v LsaCfgFlags /t REG_DWORD /d 1 /f
# Estado del TPM
Get-Tpm | Select-Object TpmPresent, TpmReady, TpmEnabled, TpmActivated, TpmOwned
# Habilitar BitLocker en C: con protector TPM+PIN
Enable-BitLocker -MountPoint "C:" -TpmProtector
Add-BitLockerKeyProtector -MountPoint "C:" -Pin (ConvertTo-SecureString "2025SecurePin" -AsPlainText -Force) -TpmAndPinProtector
# Guardar clave de recuperación en AD
Backup-BitLockerKeyProtector -MountPoint "C:" `
-KeyProtectorId (Get-BitLockerVolume "C:").KeyProtector[0].KeyProtectorIdDeshabilitar protocolos inseguros
# Deshabilitar SMBv1 (obligatorio)
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Confirm:$false
# Deshabilitar TLS 1.0 y 1.1 en servidor y cliente
foreach ($protocol in @("SSL 2.0","SSL 3.0","TLS 1.0","TLS 1.1")) {
$path = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\$protocol\Server"
New-Item $path -Force | Out-Null
Set-ItemProperty $path -Name Enabled -Value 0
Set-ItemProperty $path -Name DisabledByDefault -Value 1
}
# Habilitar TLS 1.3 explícitamente
$p13 = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server"
New-Item $p13 -Force | Out-Null
Set-ItemProperty $p13 -Name Enabled -Value 1
# Deshabilitar RC4 (cifrado débil)
New-Item "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 128/128" -Force | Out-Null
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 128/128" -Name Enabled -Value 0
# Cambiar puerto RDP al no estándar + NLA obligatoria
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name PortNumber -Value 3392
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name UserAuthentication -Value 1Auditoría avanzada de seguridad
:: Activar auditoría completa por subcategoría
auditpol /set /subcategory:"Logon" /success:enable /failure:enable
auditpol /set /subcategory:"Account Lockout" /failure:enable
auditpol /set /subcategory:"User Account Management" /success:enable /failure:enable
auditpol /set /subcategory:"Security Group Management" /success:enable
auditpol /set /subcategory:"Directory Service Changes" /success:enable
auditpol /set /subcategory:"Credential Validation" /success:enable /failure:enable
auditpol /set /subcategory:"Process Creation" /success:enable
auditpol /set /subcategory:"Sensitive Privilege Use" /success:enable /failure:enable
auditpol /set /subcategory:"File System" /failure:enable
:: Ver auditoría configurada
auditpol /get /category:*
:: IDs de eventos clave:
:: 4624=Login OK 4625=Login FAIL 4740=Cuenta bloqueada
:: 4720=Usuario creado 4726=Borrado 4756=Miembro grupo privilegiado
:: 4688=Proceso creado 4698=Tarea programada creada
💾
10 · Backup & Disaster Recovery
Copia de Seguridad y Plan de Recuperación
Windows Server Backup, backup de AD, script automatizado con log completo y test de restauración.
Avanzado
▼
Copia de Seguridad y Plan de Recuperación
Windows Server Backup, backup de AD, script automatizado con log completo y test de restauración.
# Instalar Windows Server Backup
Install-WindowsFeature Windows-Server-Backup
# Estado y versiones disponibles
wbadmin get status
wbadmin get versions
# Backup completo a disco externo (F:)
wbadmin start backup -backuptarget:F: -include:C:,D:,E: -allCritical -quiet
# Backup solo estado del sistema (AD, registro, arranque)
wbadmin start systemstatebackup -backuptarget:F: -quiet
# Backup programado a NAS (02:00 AM)
wbadmin enable backup -addtarget:\\NAS\Backups\SRV-DC-01 -schedule:02:00 -include:C:,D:,E: -user:empresa\BkpSvc -password:BkpP@ss2025 -quiet
# Restaurar archivo individual desde backup
wbadmin start recovery -version:04/01/2026-02:00 -itemtype:File -items:E:\Empresa\Contrato.pdf -recoveryTarget:E:\Restaurados -quiet
# Exportar estructura AD a LDIF (backup adicional)
ldifde -f "D:\Backup\AD_$(Get-Date -f yyyyMMdd).ldf" -s localhostScript de backup con log y verificación
#requires -RunAsAdministrator
# Backup diario con log, verificación y alerta
param(
[string]$Target = "\\NAS\Backups\SRV-DC-01",
[string]$LogDir = "C:\Logs\Backup"
)
$ts = Get-Date -Format "yyyyMMdd_HHmm"
$log = "$LogDir\backup_$ts.log"
New-Item -Path $LogDir -ItemType Directory -Force | Out-Null
Start-Transcript -Path $log
try {
Write-Host "[$(Get-Date)] ▶ Iniciando backup hacia $Target"
# Ejecutar backup
wbadmin start backup -backuptarget:$Target -include:C:,D:,E: -allCritical -quiet
if ($LASTEXITCODE -eq 0) {
Write-Host "[$(Get-Date)] ✓ BACKUP EXITOSO" -ForegroundColor Green
# Aquí puedes añadir Send-MailMessage para notificación OK
} else {
throw "wbadmin código de error: $LASTEXITCODE"
}
# Limpiar logs de más de 30 días
Get-ChildItem $LogDir -Filter "*.log" |
Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)} |
Remove-Item -Force
} catch {
Write-Host "[$(Get-Date)] ✗ ERROR: $_" -ForegroundColor Red
# Enviar alerta de error aquí
} finally {
Stop-Transcript
}
🔄
11 · Windows Update & Hotpatch
Actualizaciones — WSUS, PSWindowsUpdate y Hotpatch
Gestión controlada de actualizaciones, WSUS para parques de equipos y Hotpatch sin reinicio (Azure Edition).
Intermedio
▼
Actualizaciones — WSUS, PSWindowsUpdate y Hotpatch
Gestión controlada de actualizaciones, WSUS para parques de equipos y Hotpatch sin reinicio (Azure Edition).
# Instalar módulo PSWindowsUpdate
Install-Module PSWindowsUpdate -Force
Import-Module PSWindowsUpdate
# Ver actualizaciones pendientes
Get-WindowsUpdate
# Instalar solo parches de seguridad (recomendado primero)
Install-WindowsUpdate -Category "Security Updates" -AcceptAll -AutoReboot
# Instalar todas las actualizaciones (incluye drivers y feature updates)
Install-WindowsUpdate -AcceptAll -IgnoreReboot
# Ver historial de actualizaciones
Get-WUHistory | Select-Object -First 30 Date, Title, Result | Format-Table -AutoSize
# Ver actualizaciones instaladas vía wmic
wmic qfe list full /format:table
# Instalar WSUS para gestionar todo el parque de servidores/PCs
Install-WindowsFeature UpdateServices,UpdateServices-WidDB,UpdateServices-Services,UpdateServices-RSAT `
-IncludeManagementTools
wsusutil.exe postinstall CONTENT_DIR=E:\WSUS
# Azure Hotpatch (solo en Azure Edition con Arc)
# Configurar desde: Portal Azure → Máquinas → Administración de actualizaciones
# Hotpatch permite aplicar parches de seguridad sin reiniciar el servidor
# Verifica disponibilidad: https://learn.microsoft.com/azure/automanage/hotpatch
📊
12 · Monitoring & Alertas
Monitoreo, Diagnóstico y Alertas Automáticas
Recursos en tiempo real, Event Viewer, health check automatizado y alertas por email o webhook.
Intermedio
▼
Monitoreo, Diagnóstico y Alertas Automáticas
Recursos en tiempo real, Event Viewer, health check automatizado y alertas por email o webhook.
# ── HERRAMIENTAS GRÁFICAS ──────────────────────────────────────
resmon # Monitor de recursos (CPU/RAM/Disco/Red)
perfmon # Monitor de rendimiento con contadores
eventvwr.msc # Visor de eventos
taskmgr # Administrador de tareas
resmon # Monitor de recursos
# ── CPU ────────────────────────────────────────────────────────
Get-WmiObject Win32_Processor | Measure-Object LoadPercentage -Average | Select-Object Average
# ── RAM ────────────────────────────────────────────────────────
$os = Get-WmiObject Win32_OperatingSystem
"Total: $([math]::Round($os.TotalVisibleMemorySize/1MB,1)) GB | Libre: $([math]::Round($os.FreePhysicalMemory/1MB,1)) GB"
# ── DISCO ──────────────────────────────────────────────────────
Get-Volume | Where-Object {$_.DriveLetter} |
Select-Object DriveLetter, FileSystemLabel,
@{N="Total_GB";E={[math]::Round($_.Size/1GB,1)}},
@{N="Libre_GB";E={[math]::Round($_.SizeRemaining/1GB,1)}},
@{N="Uso_%";E={[math]::Round((($_.Size-$_.SizeRemaining)/$_.Size)*100,0)}},
HealthStatus | Format-Table -AutoSize
# ── SERVICIOS CRÍTICOS ─────────────────────────────────────────
Get-Service NTDS,DNS,DHCP,Netlogon,W32Time,WinRM,BFE |
Where-Object {$_.Status -ne "Running"} | Select-Object Name, Status, StartType
# ── TOP 10 PROCESOS POR CPU ────────────────────────────────────
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, CPU, Id, WorkingSet
# ── UPTIME ─────────────────────────────────────────────────────
(Get-Date) - (gcim Win32_OperatingSystem).LastBootUpTime
# ── ERRORES DE LAS ÚLTIMAS 24H ────────────────────────────────
Get-WinEvent -FilterHashtable @{LogName='System';Level=1,2;StartTime=(Get-Date).AddHours(-24)} `
-MaxEvents 20 -ErrorAction SilentlyContinue |
Select-Object TimeCreated, LevelDisplayName, ProviderName, Message | Format-Table -Wrap
🚀
13 · Performance Tuning
Optimización de Rendimiento — Plan de Energía y Ajustes
Plan de energía, memoria virtual, tamaño de logs, servicios innecesarios y ajustes del kernel.
Avanzado
▼
Optimización de Rendimiento — Plan de Energía y Ajustes
Plan de energía, memoria virtual, tamaño de logs, servicios innecesarios y ajustes del kernel.
# Plan de energía High Performance (obligatorio en servidores físicos)
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
powercfg /getactivescheme
powercfg /hibernate off
# Desactivar índice de búsqueda en discos de datos
Set-WmiInstance -Class Win32_Volume -Filter 'DriveLetter = "E:"' `
-Arguments @{IndexingEnabled=$false}
# Deshabilitar hibernación del kernel
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v DisablePagingExecutive /t REG_DWORD /d 1 /f
# Ajustar tamaño máximo de logs de eventos
wevtutil sl System /ms:524288000 # 500 MB
wevtutil sl Application /ms:524288000 # 500 MB
wevtutil sl Security /ms:2147483648 # 2 GB
# Deshabilitar servicios innecesarios en servidores de producción
$off = @("XblAuthManager","XblGameSave","WSearch","Fax","SysMain","DiagTrack")
$off | ForEach-Object {
Get-Service $_ -ErrorAction SilentlyContinue | Set-Service -StartupType Disabled
Stop-Service $_ -Force -ErrorAction SilentlyContinue
}
# Para AD: ajuste específico para controladores de dominio
reg add "HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters" /v "Database Buffer Size (Megabytes)" /t REG_DWORD /d 512 /f
🌍
14 · Remote Access, WinRM y OpenSSH
Acceso Remoto — RDP Seguro, WinRM y OpenSSH
RDP con NLA + MFA, PowerShell Remoting multi-servidor, SSH integrado y Jump Server básico.
Avanzado
▼
Acceso Remoto — RDP Seguro, WinRM y OpenSSH
RDP con NLA + MFA, PowerShell Remoting multi-servidor, SSH integrado y Jump Server básico.
# Habilitar RDP con NLA obligatoria
Set-ItemProperty "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name fDenyTSConnections -Value 0
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name UserAuthentication -Value 1
# Cambiar puerto RDP a no estándar
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name PortNumber -Value 3392
# Abrir el nuevo puerto en el Firewall
New-NetFirewallRule -DisplayName "RDP WS2025" -Direction Inbound -Protocol TCP -LocalPort 3392 `
-RemoteAddress "192.168.1.0/24" -Action Allow
# Añadir usuarios al grupo RDP
Add-LocalGroupMember -Group "Remote Desktop Users" -Member "EMPRESA\GRP-IT-Admins"
# Ver sesiones activas
quser
query session
# PowerShell Remoting — habilitar WinRM
Enable-PSRemoting -Force
winrm quickconfig
# Conectar a servidor remoto
Enter-PSSession -ComputerName "SRV-FS-01" -Credential (Get-Credential)
# Ejecutar comando en múltiples servidores
$srvs = @("SRV-FS-01","SRV-HV-01","SRV-APP-01")
Invoke-Command -ComputerName $srvs -ScriptBlock {
[PSCustomObject]@{
Servidor = $env:COMPUTERNAME
Uptime = ((Get-Date)-(gcim Win32_OperatingSystem).LastBootUpTime).ToString("dd'd 'hh'h'")
CPU = (Get-WmiObject Win32_Processor | Measure-Object LoadPercentage -Average).Average
RAM_Libre= [math]::Round((Get-WmiObject Win32_OperatingSystem).FreePhysicalMemory/1MB,1)
}
}
# OpenSSH — instalar y configurar
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service sshd -StartupType Automatic
# Establecer PowerShell como shell por defecto para SSH
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell `
-Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
🛡️
15 · Windows Firewall Avanzado
Firewall — Reglas, Perfiles y Tabla de Puertos
Gestión de reglas por perfiles, tabla de puertos de referencia, bloqueo de IPs y exportación.
Avanzado
▼
Firewall — Reglas, Perfiles y Tabla de Puertos
Gestión de reglas por perfiles, tabla de puertos de referencia, bloqueo de IPs y exportación.
Puertos de referencia para WS2025 DC
| Puerto | Proto | Servicio | Perfil | Dirección |
|---|---|---|---|---|
| 53 | TCP/UDP | DNS | Domain | ↕ Ambos |
| 67–68 | UDP | DHCP | Domain | ↓ Entrada |
| 88 | TCP/UDP | Kerberos | Domain | ↕ Ambos |
| 135 | TCP | RPC Endpoint | Domain | ↓ Solo LAN |
| 389 / 636 | TCP/UDP | LDAP / LDAPS | Domain | ↕ Ambos |
| 443 | TCP | HTTPS salida | All | ↑ Salida |
| 445 | TCP | SMB 3.1.1 | Domain | ↓ Solo LAN |
| 3268 / 3269 | TCP | Global Catalog | Domain | ↕ Ambos |
| 3389 / 3392 | TCP | RDP | Domain | ❌ Bloquear externo |
| 5985 / 5986 | TCP | WinRM HTTP/S | Domain | ↓ Solo LAN |
| 22 | TCP | SSH | Domain | ↓ Solo LAN |
| 443 (QUIC) | UDP | SMB sobre QUIC | All | ↓ Entrada |
# Estado del firewall en todos los perfiles
netsh advfirewall show allprofiles
# Crear regla de entrada (solo desde LAN)
New-NetFirewallRule `
-DisplayName "SMB-LAN-Only" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 445 `
-RemoteAddress "192.168.1.0/24" `
-Action Allow `
-Profile Domain,Private `
-Enabled True
# Bloquear IP atacante
New-NetFirewallRule -DisplayName "BLOCK-Threat-IP" `
-Direction Inbound -RemoteAddress "198.51.100.0/24" -Action Block
# Ver reglas activas
Get-NetFirewallRule | Where-Object {$_.Enabled -eq "True"} |
Select-Object DisplayName,Direction,Action | Sort-Object Direction | Format-Table
# Exportar configuración
netsh advfirewall export "C:\Backup\FW_$(Get-Date -f yyyyMMdd).wfw"
# Abrir consola avanzada
wf.msc
☁️
16 · Azure Arc & Gestión Híbrida
Azure Arc — Gestión Híbrida y Hotpatch
Conectar WS2025 a Azure Arc, Azure Policy, Defender for Cloud, Monitor y Hotpatch sin reinicio.
Avanzado
▼
Azure Arc — Gestión Híbrida y Hotpatch
Conectar WS2025 a Azure Arc, Azure Policy, Defender for Cloud, Monitor y Hotpatch sin reinicio.
Azure Arc extiende el plano de control de Azure a servidores on-premises. Permite aplicar políticas de seguridad, monitorear con Azure Monitor, usar Microsoft Defender for Cloud, gestionar actualizaciones con Azure Update Manager y, en Azure Edition, aplicar Hotpatch sin reinicio.
# Instalar el agente Azure Connected Machine (AMA)
# Descarga: https://aka.ms/AzureConnectedMachineAgent
# Conectar servidor a Azure Arc (script generado desde el portal)
Connect-AzConnectedMachine `
-ResourceGroupName "rg-servidores-prod" `
-Location "westeurope" `
-SubscriptionId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# Verificar estado del agente
azcmagent show
azcmagent check
azcmagent extension list
# Instalar extensión de Azure Monitor Agent
azcmagent extension add --name AzureMonitorWindowsAgent `
--publisher Microsoft.Azure.Monitor
# Desde Azure PowerShell — ver máquinas Arc registradas
Get-AzConnectedMachine -ResourceGroupName "rg-servidores-prod" |
Select-Object Name, OSName, Status, LastStatusChange
# Asignar política de Azure al servidor
New-AzPolicyAssignment -Name "Audit-BitLocker" `
-PolicyDefinitionId "/providers/Microsoft.Authorization/policyDefinitions/..." `
-Scope "/subscriptions/.../resourceGroups/rg-servidores-prod"
# Azure Update Manager — aplicar actualizaciones desde Azure
# Portal Azure → Azure Update Manager → Máquinas → Evaluar y aplicar
🐳
17 · Windows Containers & eBPF
Contenedores Windows 2025 — Docker y Kubernetes
Imágenes más ligeras, eBPF para visibilidad de red, Docker Engine y configuración básica.
Avanzado
▼
Contenedores Windows 2025 — Docker y Kubernetes
Imágenes más ligeras, eBPF para visibilidad de red, Docker Engine y configuración básica.
# Instalar rol de Contenedores
Install-WindowsFeature -Name Containers -Restart
# Instalar Docker Engine tras reiniciar
Install-Module DockerMsftProvider -Repository PSGallery -Force
Install-Package Docker -ProviderName DockerMsftProvider -Force
Start-Service Docker
Set-Service Docker -StartupType Automatic
# Verificar
docker version
docker info
# Imágenes base WS2025 (más pequeñas que WS2022)
docker pull mcr.microsoft.com/windows/servercore:ltsc2025
docker pull mcr.microsoft.com/windows/nanoserver:ltsc2025
# Contenedor IIS de prueba
docker run -d -p 8080:80 --name iis-test `
mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2025
# Contenedor con montaje de carpeta compartida
docker run -d --name app-test `
-v E:\App:C:\App `
mcr.microsoft.com/windows/servercore:ltsc2025
# Ver contenedores en ejecución
docker ps -a
docker stats --no-stream
# Limpiar contenedores e imágenes no usadas
docker system prune -af
🖨️
18 · Print Services
Servidor de Impresión
Instalación y gestión de impresoras compartidas, drivers, colas y limpieza del spooler.
Intermedio
▼
Servidor de Impresión
Instalación y gestión de impresoras compartidas, drivers, colas y limpieza del spooler.
# Instalar servidor de impresión
Install-WindowsFeature Print-Server, Print-Internet -IncludeManagementTools
# Añadir impresora de red por IP
Add-PrinterPort -Name "IP_192.168.1.60" -PrinterHostAddress "192.168.1.60"
Add-Printer -Name "HP LaserJet Oficina" `
-PortName "IP_192.168.1.60" `
-DriverName "HP Universal Printing PCL 6"
# Compartir y publicar en AD
Set-Printer -Name "HP LaserJet Oficina" -Shared $true -ShareName "ImpOfi" -Published $true
# Ver impresoras y colas
Get-Printer | Select-Object Name, PortName, Shared, ShareName, Published
Get-PrintJob -PrinterName "HP LaserJet Oficina"
# Limpiar spooler atascado
net stop spooler
Remove-Item "C:\Windows\System32\spool\PRINTERS\*" -Force -ErrorAction SilentlyContinue
net start spooler
# Abrir administrador de impresión
printmanagement.msc
🔧
19 · Troubleshooting
Resolución de Problemas Frecuentes
Los 12 problemas más comunes en WS2025 con diagnóstico exacto y soluciones paso a paso.
Variable
▼
Resolución de Problemas Frecuentes
Los 12 problemas más comunes en WS2025 con diagnóstico exacto y soluciones paso a paso.
| Síntoma | Causa probable | Diagnóstico / Solución |
|---|---|---|
| Fallo de autenticación Kerberos | Hora desincronizada >5 minutos | w32tm /resync /force + verificar NTP |
| Clientes no se unen al dominio | DNS no apunta al DC o AD no instalado | Verificar nslookup empresa.local desde el cliente |
| GPO no se aplica | Replicación AD pendiente o GPLink incorrecto | gpupdate /force + repadmin /syncall |
| SYSVOL no replica entre DCs | DFSR detenido o divergencia de versiones | dfsrdiag SyncNow /Membership:empresa.local |
| DNS no resuelve internamente | Zona inversa faltante o registros PTR | ipconfig /registerdns + revisar zonas DNS |
| DHCP no asigna IPs | No autorizado en AD o scope agotado | Add-DhcpServerInDC + revisar rango |
| SMB sobre QUIC no conecta | Certificado inválido o puerto UDP 443 bloqueado | Verificar cert + regla Firewall UDP 443 |
| Hyper-V VM no arranca | vSwitch eliminado o corrupción de VHDX | Get-VM | Select Name,State + revisar vSwitch |
| BitLocker pide PIN en cada arranque | TPM no reconoce el arranque (cambio BIOS/HW) | Suspender BitLocker, hacer cambio, reactivar |
| WinRM no conecta remotamente | Firewall o servicio detenido | Enable-PSRemoting -Force |
| Windows LAPS no genera contraseña | Esquema AD no actualizado o GPO no aplicada | Update-LapsADSchema + verificar GPO |
| Disco C: al 90%+ | Logs, caché WU o WinSxS | DISM /StartComponentCleanup /ResetBase |
Reparación del sistema y AD
:: Reparación completa del SO (siempre en este orden)
sfc /scannow
DISM /Online /Cleanup-Image /CheckHealth
DISM /Online /Cleanup-Image /ScanHealth
DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow :: Segunda pasada post-DISM
:: Diagnóstico completo del DC
dcdiag /test:all /v /f:C:\Logs\dcdiag.txt
:: Reparar replicación AD
repadmin /showrepl * /errorsonly
repadmin /syncall /AdeP
:: Reparar SYSVOL (DFSR)
dfsrdiag SyncNow /Membership:empresa.local
:: Reset completo de red
ipconfig /flushdns
ipconfig /registerdns
netsh winsock reset
netsh int ip reset
:: Emergencia — servidor no arranca (WinRE)
bootrec /fixmbr
bootrec /fixboot
bootrec /rebuildbcd
:: Restaurar estado del sistema desde backup
wbadmin start systemstaterecovery -version:04/01/2026-02:00 -quiet
📜
20 · Scripts de Automatización
Scripts Esenciales — Health Check y Mantenimiento
Script de monitoreo continuo con alertas, script de mantenimiento mensual y reporte HTML de salud.
Avanzado
▼
Scripts Esenciales — Health Check y Mantenimiento
Script de monitoreo continuo con alertas, script de mantenimiento mensual y reporte HTML de salud.
Script de health check con alertas (health-ws2025.ps1)
#requires -RunAsAdministrator
# Health check horario — programa como tarea con SYSTEM cada 60 min
$alertas = @()
$os = Get-WmiObject Win32_OperatingSystem
# CPU alto (>85%)
$cpu = (Get-WmiObject Win32_Processor | Measure-Object LoadPercentage -Average).Average
if ($cpu -gt 85) { $alertas += "⚠ CPU: ${cpu}%" }
# RAM baja (<10% libre)
$ramPct = ($os.FreePhysicalMemory / $os.TotalVisibleMemorySize) * 100
if ($ramPct -lt 10) { $alertas += "⚠ RAM libre: $([math]::Round($ramPct,1))%" }
# Disco C: casi lleno (<15% libre)
$c = Get-Volume -DriveLetter C
if (($c.SizeRemaining / $c.Size) -lt 0.15) {
$alertas += "⚠ Disco C: $([math]::Round($c.SizeRemaining/1GB,1)) GB libres"
}
# Servicios críticos detenidos
Get-Service NTDS,DNS,DHCP,Netlogon,W32Time -ErrorAction SilentlyContinue |
Where-Object {$_.Status -ne "Running"} |
ForEach-Object { $alertas += "🔴 Servicio detenido: $($_.Name)" }
# Cuentas bloqueadas en AD
$locked = (Search-ADAccount -LockedOut).Count
if ($locked -gt 3) { $alertas += "⚠ $locked cuentas AD bloqueadas" }
# Resultado
if ($alertas.Count -gt 0) {
$alertas | ForEach-Object { Write-Host $_ -ForegroundColor Red }
# Añadir aquí Send-MailMessage o webhook para Teams/Slack
} else {
Write-Host "[$(Get-Date -f 'HH:mm')] ✓ Sistema saludable" -ForegroundColor Green
}Script de mantenimiento mensual (monthly-maint-2025.ps1)
#requires -RunAsAdministrator
# Mantenimiento mensual WS2025 — programar primer domingo del mes a las 03:00
$log = "C:\Logs\Maint\maint_$(Get-Date -f 'yyyyMMdd').log"
New-Item -Path (Split-Path $log) -ItemType Directory -Force | Out-Null
Start-Transcript -Path $log
function Log ($msg,$c="White"){ Write-Host "[$(Get-Date -f 'HH:mm:ss')] $msg" -ForegroundColor $c }
Log "═══ MANTENIMIENTO WS2025 — $(Get-Date -f 'dd/MM/yyyy') ═══" Cyan
# 1 — Reparar archivos del sistema
Log "[1/8] SFC..."
sfc /scannow
# 2 — Reparar imagen Windows
Log "[2/8] DISM RestoreHealth..."
DISM /Online /Cleanup-Image /RestoreHealth
# 3 — Limpiar archivos temporales
Log "[3/8] Archivos temporales..."
@("$env:TEMP\*","C:\Windows\Temp\*") |
ForEach-Object { Remove-Item $_ -Recurse -Force -ErrorAction SilentlyContinue }
# 4 — Limpiar caché Windows Update
Log "[4/8] Caché Windows Update..."
Stop-Service wuauserv -Force
Remove-Item "C:\Windows\SoftwareDistribution\Download\*" -Recurse -Force -ErrorAction SilentlyContinue
Start-Service wuauserv
# 5 — Diagnóstico AD
Log "[5/8] Diagnóstico Active Directory..."
dcdiag /test:all /f:C:\Logs\Maint\dcdiag_$(Get-Date -f 'yyyyMMdd').txt
repadmin /replsummary >> "$log"
# 6 — Sincronizar hora
Log "[6/8] Sincronizando NTP..."
w32tm /resync /force
# 7 — Optimizar discos
Log "[7/8] Optimizando discos..."
Get-Volume | Where-Object {$_.DriveLetter} | Optimize-Volume -Verbose
# 8 — Resumen final
Log "[8/8] Resumen de salud:" Cyan
$os = Get-WmiObject Win32_OperatingSystem
Log "Uptime : $((Get-Date)-($os.ConvertToDateTime($os.LastBootUpTime)))"
Log "RAM : $([math]::Round($os.FreePhysicalMemory/1MB,1)) GB libres"
Get-Volume | Where-Object {$_.DriveLetter} |
Select-Object DriveLetter, @{N="Libre_GB";E={[math]::Round($_.SizeRemaining/1GB,1)}} |
Format-Table
Log "═══ COMPLETADO ═══" Green
Stop-Transcript
✅
21 · Checklist de Mantenimiento Periódico
Plan de Mantenimiento — Semanal, Mensual, Trimestral y Anual
Lista de verificación completa para mantener WS2025 en condiciones óptimas de rendimiento y seguridad.
▼
Plan de Mantenimiento — Semanal, Mensual, Trimestral y Anual
Lista de verificación completa para mantener WS2025 en condiciones óptimas de rendimiento y seguridad.
📅 Semanal
- ☐ Revisar Event Viewer (Critical + Error)
- ☐ Verificar espacio libre en todos los discos
- ☐ Confirmar que el backup completó sin errores
- ☐
repadmin /replsummary - ☐ Revisar cuentas AD bloqueadas
- ☐ Comprobar servicios críticos activos
- ☐ Revisar intentos de login fallidos (4625)
📆 Mensual
- ☐ Aplicar actualizaciones de seguridad
- ☐
sfc /scannow+DISM /RestoreHealth - ☐ Deshabilitar usuarios AD inactivos >90 días
- ☐ Test de restauración desde backup
- ☐ Revisar logs de auditoría de seguridad
- ☐ Limpiar temporales y caché Windows Update
- ☐
dcdiag /test:Connectivity
📊 Trimestral
- ☐
dcdiag /test:all /v— diagnóstico completo - ☐ Verificar salud SMART de todos los discos
- ☐ Renovar contraseñas de cuentas de servicio
- ☐ Revisar membresías de grupos privilegiados
- ☐ Revisar y limpiar reglas del Firewall
- ☐ Verificar certificados SSL/TLS (caducidad)
- ☐ Actualizar documentación del servidor
🗓️ Anual
- ☐ Test completo del Plan de Recuperación ante Desastres
- ☐ Actualizar BIOS/firmware del servidor
- ☐ Limpieza física del hardware (polvo, ventiladores)
- ☐ Revisar capacidad vs. crecimiento previsto
- ☐ Revisar fechas de fin de soporte de roles y apps
- ☐ Verificar licencias y cobertura de soporte
- ☐ Actualizar plan de contingencia y contactos
