Windows Server 2022
Guía técnica exhaustiva de instalación, configuración inicial, roles y características, seguridad avanzada, automatización con PowerShell y mantenimiento preventivo para entornos empresariales modernos.
🆕
00 · Introducción
Novedades y Mejoras vs. WS2019
Qué hay de nuevo en Windows Server 2022: seguridad, rendimiento, Hyper-V, contenedores y Azure.
Referencia
▼
Novedades y Mejoras vs. WS2019
Qué hay de nuevo en Windows Server 2022: seguridad, rendimiento, Hyper-V, contenedores y Azure.
Secured-Core Server
Hardware root of trust, virtualización de seguridad (VBS), Credential Guard habilitado por defecto y arranque seguro mejorado.
TLS 1.3 por defecto
TLS 1.3 activado de forma predeterminada. DNS sobre HTTPS (DoH) integrado. Conexiones SMB 3.1.1 comprimidas con AES-256.
SMB comprimido
Compresión de SMB reduce el tráfico de red hasta un 30%. Mejor rendimiento en transferencias de archivos grandes y en WANs.
Contenedores mejorados
Imágenes de contenedor más pequeñas (Server Core 4x más ligera). Compatibilidad con Windows Containers en Kubernetes.
Azure Arc nativo
Gestión híbrida con Azure Arc integrada. Azure Automanage, Policy, Defender for Cloud y Monitor directamente sobre servidores on-premises.
Storage Spaces Direct
Mejoras en Storage Spaces Direct para Datacenter. Soporte para NVMe, persistente memory (PMem) y thin provisioning mejorado.
Tabla comparativa de ediciones
| Característica | Standard | Datacenter | Azure Edition |
|---|---|---|---|
| Licencia por | Core 2+2 VMs | Core + VMs ilimitadas | Azure / BYOL |
| Hyper-V | 2 VMs incluidas | Ilimitadas | Incluido |
| Storage Spaces Direct | ❌ | ✅ | ✅ |
| Shielded VMs | ❌ | ✅ | ✅ |
| Azure Hotpatch | ❌ | ❌ | ✅ |
| SMB compresión | ✅ | ✅ | ✅ |
| DNS sobre HTTPS | ✅ | ✅ | ✅ |
📋
01 · Pre-instalación
Requisitos de Hardware y Preparación
Hardware mínimo y recomendado por edición, lista de verificación y preparación del entorno.
Básico
▼
Requisitos de Hardware y Preparación
Hardware mínimo y recomendado por edición, lista de verificación y preparación del entorno.
CPU
RAM
Disco Sistema
Red
TPM
Instalación
Lista de verificación previa
- BIOS/UEFI actualizado — Verifica la versión del firmware del servidor y actualiza si hay versión estable disponible.
- UEFI + Secure Boot activos — Necesario para Secured-Core Server y TPM 2.0.
- Modo GPT confirmado — Desactiva CSM/Legacy. La instalación en GPT+UEFI es obligatoria para características de seguridad.
- TPM 2.0 habilitado — Verifica en BIOS bajo «Security» o «Advanced». Esencial para BitLocker y Credential Guard.
- Controladores RAID/NIC descargados — Del fabricante del servidor (HP, Dell, Lenovo, SuperMicro) en USB aparte.
- IP estática planificada — IP, máscara, gateway, DNS primario y secundario definidos.
- Nombre del servidor decidido — Máx. 15 caracteres, sin espacios. Ej:
SRV-DC-01,SRV-FILE-01. - Dominio interno definido — Ej:
empresa.locaload.empresa.com. - Licencia disponible — Clave MAK, KMS o suscripción EA/OPEN.
- Backup de sistemas existentes — Si es migración, backup completo antes de comenzar.
Crear USB booteable con Rufus
1. Descargar Rufus desde https://rufus.ie (sin instalación)
2. Insertar USB 8 GB o más (todos los datos se borrarán)
Dispositivo: → USB seleccionado
Tipo de arranque: → Imagen de disco → seleccionar ISO de WS2022
Esquema partición: → GPT
Sistema destino: → UEFI (no CSM)
Sistema archivos: → NTFS
Tamaño clúster: → 4096 bytes (por defecto)
3. Clic EMPEZAR → confirmar borrado del USBVerificar hash SHA256 del ISO
# Verificar integridad del ISO descargado
Get-FileHash "C:\Downloads\WS2022.iso" -Algorithm SHA256 | Format-List
# Compara el hash con el publicado en Microsoft Volume Licensing
💿
02 · Instalación
Instalación Completa Paso a Paso
Proceso de instalación: GUI vs. Server Core, particionado, OOBE y activación.
Intermedio
▼
Instalación Completa Paso a Paso
Proceso de instalación: GUI vs. Server Core, particionado, OOBE y activación.
Selección de edición — GUI vs. Server Core
🖥️ Desktop Experience (GUI)
- Interfaz gráfica completa
- Server Manager, MMC, herramientas GUI
- Mayor consumo de RAM (~1 GB extra)
- Superficie de ataque mayor
- ✦ Recomendado para servidores de archivos, AD y usuarios nuevos en administración
⌨️ Server Core (sin GUI)
- Solo línea de comandos local
- Menor RAM, menor superficie de ataque
- Administración remota vía PowerShell / RSAT
- Actualizaciones más ligeras y rápidas
- ✦ Recomendado para producción, Hyper-V hosts, DC secundarios
Particionado recomendado
Esquema recomendado — servidor con 2 discos (SSD 120GB + HDD 2TB):
── DISCO 0 (SSD 120 GB) — Solo sistema operativo ──
Partición 1 (EFI): 300 MB → Creada automáticamente
Partición 2 (MSR): 16 MB → Creada automáticamente
Partición 3 (C:\): 80 GB → Sistema operativo WS2022
Partición 4 (Recup): 500 MB → Creada automáticamente
── DISCO 1 (HDD/SSD 2 TB) — Datos (añadir después de instalar) ──
Partición 1 (D:\): 500 GB → Active Directory / SYSVOL / NTDS
Partición 2 (E:\): 1 TB → Carpetas compartidas / Datos usuarios
Partición 3 (F:\): ~500 GB → Backups locales
REGLA DE ORO: Nunca almacenes datos de usuarios en C:\
Si reinstalaas el SO, pierdes los datos del dominio.Activación del servidor
:: Ver estado de activación actual
slmgr /dli
:: Ver detalles completos de la licencia
slmgr /dlv
:: Introducir clave de producto manualmente
slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
:: Activar online
slmgr /ato
:: Configurar servidor KMS (si usas KMS corporativo)
slmgr /skms kms-server.empresa.local
slmgr /ato
:: Verificar versión y build instalado
winver
wmic os get Caption, Version, BuildNumber, OSArchitectureConvertir Server Core a GUI (y viceversa)
# Añadir GUI a Server Core (necesita ISO montado en D:)
Install-WindowsFeature Server-Gui-Shell, Server-Gui-Mgmt-Infra `
-Source "D:\Sources\SxS" -Restart
# Quitar GUI (pasar a Server Core — más seguro)
Uninstall-WindowsFeature Server-Gui-Shell, Server-Gui-Mgmt-Infra -Restart
# Ver modo actual
Get-WindowsFeature Server-Gui-Shell | Select-Object Name, InstallState
🔧
03 · Post-instalación
Configuración Inicial del Servidor
Nombre, zona horaria, NTP, SConfig, drivers, Server Manager y hardening básico inmediato.
Intermedio
▼
Configuración Inicial del Servidor
Nombre, zona horaria, NTP, SConfig, drivers, Server Manager y hardening básico inmediato.
SConfig — Herramienta de configuración interactiva
:: Abrir SConfig (especialmente útil en Server Core)
SConfig
Opciones principales de SConfig:
1 → Unir al dominio / grupo de trabajo
2 → Cambiar nombre del equipo
4 → Configurar Escritorio Remoto
5 → Windows Update
6 → Descargar e instalar actualizaciones
8 → Configuración de red
9 → Fecha y hora
14 → Salir a la línea de comandos
15 → Reiniciar el servidorNombre del servidor y zona horaria
# Cambiar nombre del servidor
Rename-Computer -NewName "SRV-DC-01" -Force -Restart
# Zonas horarias más usadas
Set-TimeZone -Id "Romance Standard Time" # España peninsular
Set-TimeZone -Id "Atlantic Standard Time" # Islas Canarias
Set-TimeZone -Id "Central European Standard Time" # Alemania / Francia
Set-TimeZone -Id "UTC" # UTC
# Configurar NTP con servidores pool públicos
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 /status
# Ver zona horaria actual
Get-TimeZoneInstalar RSAT y herramientas de administración
# Instalar las herramientas de administración más comunes
Install-WindowsFeature RSAT -IncludeAllSubFeature -IncludeManagementTools
# Instalar herramientas específicas
Install-WindowsFeature RSAT-AD-Tools # AD Users & Computers, etc.
Install-WindowsFeature RSAT-DNS-Server # DNS Manager
Install-WindowsFeature RSAT-DHCP # DHCP Manager
Install-WindowsFeature RSAT-File-Services # File & Storage Services
Install-WindowsFeature GPMC # Group Policy Mgmt Console
# Ver roles instalados
Get-WindowsFeature | Where-Object {$_.InstallState -eq "Installed"} |
Format-Table Name, DisplayName -AutoSize
# Ver todos los roles disponibles con descripción
Get-WindowsFeature | Format-Table -AutoSizePolítica de contraseñas y seguridad básica
:: Configurar política de contraseñas segura
net accounts /minpwlen:14 /maxpwage:90 /minpwage:1 /uniquepw:10
:: Bloqueo tras 5 intentos fallidos, desbloqueo automático en 30 min
net accounts /lockoutthreshold:5 /lockoutduration:30 /lockoutwindow:30
:: Ver política actual
net accounts
:: Renombrar cuenta administrador local (dificulta ataques dirigidos)
wmic useraccount where name='Administrator' rename 'SrvAdmin'
:: Crear cuenta de administrador secundaria con nombre no obvio
net user "SrvBackupAdmin" "C0mpl3x!P@ss2026" /add /passwordchg:no
net localgroup Administrators "SrvBackupAdmin" /add
:: Deshabilitar la cuenta Guest
net user Guest /active:no
🌐
04 · Networking
Red — IP Estática, DNS, DHCP y NIC Teaming
Configuración completa de red: IP estática, DNS integrado con AD, DHCP, NIC Teaming y DoH.
Intermedio
▼
Red — IP Estática, DNS, DHCP y NIC Teaming
Configuración completa de red: IP estática, DNS integrado con AD, DHCP, NIC Teaming y DoH.
Configurar IP estática
# Ver adaptadores disponibles
Get-NetAdapter | Select-Object Name, InterfaceIndex, Status, LinkSpeed, MacAddress
# Ver configuración IP actual
Get-NetIPConfiguration
# Eliminar IP dinámica (DHCP) si existe
Remove-NetIPAddress -InterfaceAlias "Ethernet" -Confirm:$false
# Asignar IP estática
New-NetIPAddress `
-InterfaceAlias "Ethernet" `
-IPAddress "192.168.1.10" `
-PrefixLength 24 `
-DefaultGateway "192.168.1.1"
# DNS primario = sí mismo (DC), secundario = DNS externo
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" `
-ServerAddresses "192.168.1.10", "8.8.8.8"
# Deshabilitar IPv6 si no se usa (reduce superficie de ataque)
Disable-NetAdapterBinding -Name "Ethernet" -ComponentID ms_tcpip6NIC Teaming (redundancia y balanceo de carga)
# Crear NIC Team con 2 adaptadores (modo LACP)
New-NetLbfoTeam -Name "Team-LAN" `
-TeamMembers "Ethernet","Ethernet 2" `
-TeamingMode LACP `
-LoadBalancingAlgorithm Dynamic
# Alternativa: Switch Independent (sin configurar el switch)
New-NetLbfoTeam -Name "Team-LAN" `
-TeamMembers "Ethernet","Ethernet 2" `
-TeamingMode SwitchIndependent
# Ver estado del equipo
Get-NetLbfoTeam
Get-NetLbfoTeamMember
# Eliminar NIC Team
Remove-NetLbfoTeam -Name "Team-LAN" -Confirm:$falseConfigurar DHCP
# Instalar rol DHCP
Install-WindowsFeature DHCP -IncludeManagementTools
# Autorizar servidor DHCP en Active Directory
Add-DhcpServerInDC
# Crear scope de red
Add-DhcpServerv4Scope -Name "Red Corporativa" `
-StartRange "192.168.1.100" `
-EndRange "192.168.1.200" `
-SubnetMask "255.255.255.0" `
-LeaseDuration "8.00:00:00" `
-State Active
# Opciones de scope: gateway, DNS y dominio
Set-DhcpServerv4OptionValue -ScopeId "192.168.1.0" `
-Router "192.168.1.1" `
-DnsServer "192.168.1.10" `
-DnsDomain "empresa.local"
# Excluir IPs estáticas (1-50: equipos de infraestructura)
Add-DhcpServerv4ExclusionRange -ScopeId "192.168.1.0" `
-StartRange "192.168.1.1" `
-EndRange "192.168.1.99"
# Reserva de IP para equipo específico por MAC
Add-DhcpServerv4Reservation -ScopeId "192.168.1.0" `
-IPAddress "192.168.1.150" `
-ClientId "00-1A-2B-3C-4D-5E" `
-Description "Impresora Sala Reuniones"
# Ver leases activos
Get-DhcpServerv4Lease -ScopeId "192.168.1.0" | Select-Object IPAddress, HostName, ClientIdDNS sobre HTTPS (DoH) — Nuevo en WS2022
# Configurar DNS sobre HTTPS en el cliente de red del servidor
Add-DnsClientDohServerAddress -ServerAddress "8.8.8.8" `
-DohTemplate "https://dns.google/dns-query" `
-AllowFallbackToUdp $true -AutoUpgrade $true
Add-DnsClientDohServerAddress -ServerAddress "1.1.1.1" `
-DohTemplate "https://cloudflare-dns.com/dns-query" `
-AllowFallbackToUdp $true -AutoUpgrade $true
# Ver servidores DoH configurados
Get-DnsClientDohServerAddress
🗄️
05 · Active Directory Domain Services
Active Directory — Instalación y Configuración
Promover servidor a DC, Forest y Domain Level, OUs, replicación y transferencia de roles FSMO.
Avanzado
▼
Active Directory — Instalación y Configuración
Promover servidor a DC, Forest y Domain Level, OUs, replicación y transferencia de roles FSMO.
Instalar y promover el primer controlador de dominio
# Paso 1: Instalar el rol AD DS
Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
# Paso 2: Promover a DC (nuevo bosque)
Install-ADDSForest `
-DomainName "empresa.local" `
-DomainNetbiosName "EMPRESA" `
-ForestMode WinThreshold `
-DomainMode WinThreshold `
-DatabasePath "D:\NTDS" `
-LogPath "D:\NTDS" `
-SysvolPath "D:\SYSVOL" `
-SafeModeAdministratorPassword (ConvertTo-SecureString "D$RM@Pass2026!" -AsPlainText -Force) `
-InstallDns -Force
# El servidor se reiniciará automáticamente
# Agregar DC secundario a dominio existente
Install-ADDSDomainController `
-DomainName "empresa.local" `
-Credential (Get-Credential) `
-DatabasePath "D:\NTDS" `
-LogPath "D:\NTDS" `
-SysvolPath "D:\SYSVOL" `
-InstallDns -ForceEstructura de Unidades Organizativas (OUs)
# Crear estructura de OUs corporativa completa
$dn = "DC=empresa,DC=local"
# OU raíz de la empresa
New-ADOrganizationalUnit -Name "EMPRESA" -Path $dn -ProtectedFromAccidentalDeletion $true
$base = "OU=EMPRESA,$dn"
# OUs principales
New-ADOrganizationalUnit -Name "Usuarios" -Path $base
New-ADOrganizationalUnit -Name "Equipos" -Path $base
New-ADOrganizationalUnit -Name "Grupos" -Path $base
New-ADOrganizationalUnit -Name "Servidores" -Path $base
New-ADOrganizationalUnit -Name "Cuentas de Servicio" -Path $base
# Sub-OUs de usuarios por departamento
$uOU = "OU=Usuarios,$base"
New-ADOrganizationalUnit -Name "Dirección" -Path $uOU
New-ADOrganizationalUnit -Name "TI" -Path $uOU
New-ADOrganizationalUnit -Name "Ventas" -Path $uOU
New-ADOrganizationalUnit -Name "Contabilidad" -Path $uOU
New-ADOrganizationalUnit -Name "RRHH" -Path $uOUGPOs esenciales de seguridad
# Abrir consola de GPO
gpmc.msc
# Forzar actualización en todos los equipos del dominio
Get-ADComputer -Filter * | ForEach-Object {
Invoke-GPUpdate -Computer $_.Name -Force -ErrorAction SilentlyContinue
}
# Crear GPO de seguridad base
New-GPO -Name "SEC-Base-Todos"
New-GPLink -Name "SEC-Base-Todos" -Target "OU=EMPRESA,DC=empresa,DC=local"
# Ver estado de replicación de AD
repadmin /replsummary
repadmin /showrepl
# Diagnóstico completo del dominio
dcdiag /test:all /v
# Ver roles FSMO
netdom query fsmo
# Transferir roles FSMO a otro DC (planificado)
Move-ADDirectoryServerOperationMasterRole -Identity "SRV-DC-02" `
-OperationMasterRole PDCEmulator, RIDMaster, InfrastructureMaster `
-Confirm:$false
👤
06 · Gestión de Usuarios y Grupos
Usuarios, Grupos, Permisos y Fine-Grained Password
CRUD de usuarios AD, grupos de seguridad, importación masiva CSV y políticas de contraseña granulares.
Intermedio
▼
Usuarios, Grupos, Permisos y Fine-Grained Password
CRUD de usuarios AD, grupos de seguridad, importación masiva CSV y políticas de contraseña granulares.
# Crear usuario en AD con atributos completos
New-ADUser `
-Name "Laura Martínez" `
-SamAccountName "lmartinez" `
-UserPrincipalName "lmartinez@empresa.local" `
-GivenName "Laura" `
-Surname "Martínez" `
-DisplayName "Laura Martínez" `
-Department "Tecnología" `
-Title "Administradora de Sistemas" `
-Office "Madrid" `
-OfficePhone "+34 91 000 0001" `
-Path "OU=TI,OU=Usuarios,OU=EMPRESA,DC=empresa,DC=local" `
-AccountPassword (ConvertTo-SecureString "T3mP@ss2026!" -AsPlainText -Force) `
-Enabled $true `
-ChangePasswordAtLogon $true `
-PasswordNeverExpires $false
# Operaciones comunes de usuario
Disable-ADAccount -Identity "lmartinez"
Enable-ADAccount -Identity "lmartinez"
Unlock-ADAccount -Identity "lmartinez"
Remove-ADUser -Identity "lmartinez" -Confirm:$false
# Resetear contraseña
Set-ADAccountPassword -Identity "lmartinez" `
-NewPassword (ConvertTo-SecureString "NuevoP@ss2026!" -AsPlainText -Force) -Reset
# Buscar usuarios inactivos (sin login en 90 días)
$fecha = (Get-Date).AddDays(-90)
Get-ADUser -Filter {LastLogonDate -lt $fecha -and Enabled -eq $true} `
-Properties LastLogonDate | Select-Object Name, SamAccountName, LastLogonDate
# Importar usuarios masivos desde CSV
# CSV formato: Name,Sam,Department,Title,Password
Import-Csv "C:\Admin\usuarios.csv" | ForEach-Object {
New-ADUser -Name $_.Name -SamAccountName $_.Sam `
-Department $_.Department -Title $_.Title `
-Path "OU=Usuarios,OU=EMPRESA,DC=empresa,DC=local" `
-AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -Force) `
-Enabled $true -ChangePasswordAtLogon $true
Write-Host "✓ $($_.Name)" -ForegroundColor Green
}Fine-Grained Password Policy (FGPP)
Permite aplicar políticas de contraseña diferentes a usuarios o grupos específicos (administradores, cuentas de servicio).
# Crear política de contraseñas estricta para administradores
New-ADFineGrainedPasswordPolicy `
-Name "PSO-Admins" `
-Precedence 10 `
-MinPasswordLength 16 `
-PasswordHistoryCount 24 `
-MaxPasswordAge (New-TimeSpan -Days 60) `
-MinPasswordAge (New-TimeSpan -Days 1) `
-LockoutThreshold 3 `
-LockoutObservationWindow (New-TimeSpan -Minutes 30) `
-LockoutDuration (New-TimeSpan -Minutes 60) `
-ComplexityEnabled $true -ReversibleEncryptionEnabled $false
# Aplicar política a un grupo
Add-ADFineGrainedPasswordPolicySubject -Identity "PSO-Admins" `
-Subjects "Domain Admins"
# Ver políticas vigentes para un usuario
Get-ADUserResultantPasswordPolicy -Identity "lmartinez"
📁
07 · File & Storage Services
Almacenamiento — Carpetas, SMB 3.1.1, Cuotas y DFS
Carpetas compartidas con SMB comprimido, permisos NTFS, cuotas de disco y espacio de nombres DFS.
Intermedio
▼
Almacenamiento — Carpetas, SMB 3.1.1, Cuotas y DFS
Carpetas compartidas con SMB comprimido, permisos NTFS, cuotas de disco y espacio de nombres DFS.
Configurar SMB 3.1.1 con compresión
# Deshabilitar SMBv1 (obligatorio por seguridad)
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Confirm:$false
# Habilitar compresión SMB 3.1.1 (nuevo en WS2022)
Set-SmbServerConfiguration `
-EnableSMBCompression $true `
-Confirm:$false
# Cifrado SMB para datos en tránsito
Set-SmbServerConfiguration -EncryptData $true -Confirm:$false
# Ver configuración SMB actual
Get-SmbServerConfiguration | Select-Object `
EnableSMB1Protocol, EnableSMB2Protocol, EnableSMBCompression, EncryptDataCrear y gestionar carpetas compartidas
# Crear estructura de carpetas en disco de datos (E:\)
"E:\Empresa","E:\Empresa\Documentos","E:\Empresa\Proyectos",
"E:\Departamentos\TI","E:\Departamentos\Ventas","E:\Departamentos\RRHH",
"E:\Usuarios" | ForEach-Object { New-Item -Path $_ -ItemType Directory -Force }
# Crear carpetas compartidas SMB
New-SmbShare -Name "Empresa$" `
-Path "E:\Empresa" `
-FullAccess "EMPRESA\Domain Admins" `
-ChangeAccess "EMPRESA\Domain Users" `
-FolderEnumerationMode AccessBased `
-Description "Documentación corporativa"
# FolderEnumerationMode AccessBased = usuarios solo ven lo que tienen acceso
# Asignar permisos NTFS con icacls
icacls "E:\Departamentos\TI" /inheritance:r
icacls "E:\Departamentos\TI" /grant "EMPRESA\GRP-TI:(OI)(CI)M"
icacls "E:\Departamentos\TI" /grant "EMPRESA\Domain Admins:(OI)(CI)F"
# Mapear unidad en cliente
net use Z: \\SRV-FILE-01\Empresa$ /persistent:yesCuotas de disco (File Server Resource Manager)
# Instalar FSRM (File Server Resource Manager)
Install-WindowsFeature FS-Resource-Manager -IncludeManagementTools
# Crear plantilla de cuota de 10 GB
New-FsrmQuotaTemplate -Name "Cuota 10GB Usuario" `
-Size 10GB -SoftLimit $false
# Aplicar cuota a carpeta de usuarios
New-FsrmQuota -Path "E:\Usuarios" `
-Template "Cuota 10GB Usuario"
# Ver uso de cuotas
Get-FsrmQuota | Select-Object Path, Size, Usage, PeakUsageDFS — Espacio de nombres distribuido
# Instalar rol DFS
Install-WindowsFeature FS-DFS-Namespace, FS-DFS-Replication -IncludeManagementTools
# Crear espacio de nombres DFS (dominio)
New-DfsnRoot -Path "\\empresa.local\Datos" `
-Type DomainV2 `
-TargetPath "\\SRV-FILE-01\Empresa$"
# Añadir carpeta al espacio de nombres
New-DfsnFolder -Path "\\empresa.local\Datos\Departamentos" `
-TargetPath "\\SRV-FILE-01\Departamentos"
# Los clientes accederán siempre como: \\empresa.local\Datos\Departamentos
# sin importar qué servidor físico aloja la carpeta
🖨️
08 · Print Services
Servidor de Impresión — Gestión y Troubleshooting
Instalar impresoras en red, drivers, compartición, gestión de colas y limpieza de spooler.
Intermedio
▼
Servidor de Impresión — Gestión y Troubleshooting
Instalar impresoras en red, drivers, compartición, gestión de colas y limpieza de spooler.
# Instalar rol Servidor de Impresión
Install-WindowsFeature Print-Server, Print-Internet -IncludeManagementTools
# Añadir puerto TCP/IP para impresora de red
Add-PrinterPort -Name "IP_192.168.1.60" -PrinterHostAddress "192.168.1.60"
# Instalar impresora
Add-Printer -Name "HP LaserJet Contabilidad" `
-PortName "IP_192.168.1.60" `
-DriverName "HP Universal Printing PCL 6"
# Compartir impresora en red
Set-Printer -Name "HP LaserJet Contabilidad" `
-Shared $true -ShareName "ImpContab"
# Publicar impresora en Active Directory
Set-Printer -Name "HP LaserJet Contabilidad" -Published $true
# Ver todas las impresoras instaladas
Get-Printer | Select-Object Name, PortName, Shared, ShareName, Published
# Ver cola de impresión
Get-PrintJob -PrinterName "HP LaserJet Contabilidad"
# Cancelar todos los trabajos de impresión
Get-PrintJob -PrinterName "HP LaserJet Contabilidad" | Remove-PrintJob
# Limpiar spooler atascado
net stop spooler
Remove-Item "C:\Windows\System32\spool\PRINTERS\*" -Force -ErrorAction SilentlyContinue
net start spooler
# Instalar impresora en cliente desde el servidor (GPO)
Add-PrinterConnection "\\SRV-PRINT-01\ImpContab"
# Abrir consola de administración de impresión
printmanagement.msc
🔒
09 · Security Hardening
Hardening Avanzado — Secured-Core, Defender y Auditoría
Configurar Secured-Core Server, Windows Defender ATP, BitLocker, auditoría y desactivar servicios inseguros.
Avanzado
▼
Hardening Avanzado — Secured-Core, Defender y Auditoría
Configurar Secured-Core Server, Windows Defender ATP, BitLocker, auditoría y desactivar servicios inseguros.
Verificar y activar características Secured-Core
# Verificar estado de Secure Boot
Confirm-SecureBootUEFI
# Verificar estado de VBS (Virtualization-Based Security)
Get-WmiObject -Namespace "root\Microsoft\Windows\DeviceGuard" `
-Class Win32_DeviceGuard | Select-Object SecurityServicesRunning, VirtualizationBasedSecurityStatus
# Habilitar Credential Guard (previene robo de credenciales)
reg add "HKLM\SYSTEM\CurrentControlSet\Control\LSA" /v LsaCfgFlags /t REG_DWORD /d 1 /f
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard" /v EnableVirtualizationBasedSecurity /t REG_DWORD /d 1 /f
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard" /v LsaCfgFlags /t REG_DWORD /d 1 /f
# Verificar estado de TPM
Get-Tpm
# Habilitar BitLocker en C: con TPM
Enable-BitLocker -MountPoint "C:" `
-TpmProtector -UsedSpaceOnly
# Guardar clave de recuperación BitLocker en AD
Backup-BitLockerKeyProtector -MountPoint "C:" `
-KeyProtectorId (Get-BitLockerVolume -MountPoint "C:").KeyProtector[0].KeyProtectorIdAuditoría de seguridad exhaustiva
:: Activar auditoría avanzada por categoría
auditpol /set /subcategory:"Logon" /success:enable /failure:enable
auditpol /set /subcategory:"Logoff" /success: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:"File System" /failure:enable
auditpol /set /subcategory:"Process Creation" /success:enable
:: Ver configuración completa
auditpol /get /category:*
:: Buscar eventos críticos (últimas 2 horas)
:: 4625=Login fallido | 4740=Cuenta bloqueada | 4756=Miembro añadido a grupo privilegiado
powershell -command "Get-WinEvent -FilterHashtable @{LogName='Security';Id=4625,4740,4756;StartTime=(Get-Date).AddHours(-2)} -MaxEvents 50 | Select TimeCreated,Id,Message | Format-List"Hardening de protocolos y servicios
# Deshabilitar SMBv1 (crítico)
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Confirm:$false
# Deshabilitar TLS 1.0 y 1.1 (obsoletos)
New-Item "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" -Force
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" -Name Enabled -Value 0
# Asegurar que TLS 1.3 está habilitado
New-Item "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server" -Force
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server" -Name Enabled -Value 1
# Cambiar puerto RDP y habilitar NLA
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name PortNumber -Value 3391
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name UserAuthentication -Value 1
# Abrir nuevo puerto en Firewall
New-NetFirewallRule -DisplayName "RDP Secure Port" -Direction Inbound -Protocol TCP -LocalPort 3391 -Action Allow
💾
10 · Backup & Disaster Recovery
Copia de Seguridad y Recuperación ante Desastres
Windows Server Backup, Veeam Free, backup de AD, script automatizado y prueba de restauración.
Avanzado
▼
Copia de Seguridad y Recuperación ante Desastres
Windows Server Backup, Veeam Free, backup de AD, script automatizado y prueba de restauración.
# Instalar Windows Server Backup
Install-WindowsFeature Windows-Server-Backup
# Ver historial de backups
wbadmin get versions
# Ver estado del último backup
wbadmin get status
# Backup completo del sistema a disco externo (F:)
wbadmin start backup -backuptarget:F: -include:C:,D:,E: -allCritical -quiet
# Backup programado diario a las 02:00 a disco externo
wbadmin enable backup -addtarget:F: -schedule:02:00 -include:C:,D:,E: -quiet
# Backup a carpeta de red con credenciales
wbadmin start backup -backuptarget:\\NAS\Backups\SRV-DC-01 -include:C:,D:,E: -allCritical -user:empresa\BackupSvc -password:B@ckupP@ss2026 -quiet
# Backup solo del estado del sistema (AD, registro, arranque)
wbadmin start systemstatebackup -backuptarget:F: -quiet
# Restaurar archivo específico desde backup
wbadmin start recovery -version:03/15/2026-02:00 -itemtype:File -items:E:\Empresa\Contrato.docx -recoveryTarget:E:\Restaurados -quiet
# Exportar AD a archivo LDIF (backup adicional de estructura)
ldifde -f C:\Backup\AD_Export_$(Get-Date -f yyyyMMdd).ldf -s localhostScript de backup automatizado con alertas
#requires -RunAsAdministrator
# Backup completo diario con log, verificación y alerta por email
# Programar como Tarea Programada: SYSTEM, Diario 02:00
param(
[string]$Destino = "\\NAS\Backups\SRV-DC-01",
[string]$Email = "admin@empresa.com"
)
$ts = Get-Date -Format "yyyyMMdd_HHmm"
$logPath = "C:\Logs\Backup\backup_$ts.log"
New-Item -Path (Split-Path $logPath) -ItemType Directory -Force | Out-Null
Start-Transcript -Path $logPath
try {
Write-Host "[$(Get-Date)] INICIANDO BACKUP → $Destino"
# Ejecutar backup
wbadmin start backup -backuptarget:$Destino -include:C:,D:,E: -allCritical -quiet
if ($LASTEXITCODE -eq 0) {
Write-Host "[$(Get-Date)] ✓ BACKUP COMPLETADO EXITOSAMENTE" -ForegroundColor Green
} else {
throw "wbadmin retornó código de error: $LASTEXITCODE"
}
# Limpiar backups con más de 30 días del log
Get-ChildItem "C:\Logs\Backup\" -Filter "*.log" |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Remove-Item -Force
} catch {
Write-Host "[$(Get-Date)] ✗ ERROR: $_" -ForegroundColor Red
# Aquí puedes añadir Send-MailMessage para notificaciones
} finally {
Stop-Transcript
}
🔄
11 · Windows Update / WSUS
Gestión de Actualizaciones — WSUS y Hotpatch
Actualizaciones controladas con WSUS, PSWindowsUpdate, Azure Hotpatch y gestión de reinicios.
Intermedio
▼
Gestión de Actualizaciones — WSUS y Hotpatch
Actualizaciones controladas con WSUS, PSWindowsUpdate, Azure Hotpatch y gestión de reinicios.
# Instalar módulo PSWindowsUpdate
Install-Module PSWindowsUpdate -Force
Import-Module PSWindowsUpdate
# Ver actualizaciones disponibles (sin instalar)
Get-WindowsUpdate
# Instalar solo actualizaciones de seguridad
Install-WindowsUpdate -Category "Security Updates" -AcceptAll -AutoReboot
# Instalar todas las actualizaciones sin reiniciar
Install-WindowsUpdate -AcceptAll -IgnoreReboot
# Ver historial de actualizaciones instaladas
Get-WUHistory | Select-Object -First 30 Date, Title, Result | Format-Table -AutoSize
# Instalar WSUS (para gestionar actualizaciones de todos los equipos)
Install-WindowsFeature UpdateServices, UpdateServices-WidDB, UpdateServices-Services, UpdateServices-RSAT `
-IncludeManagementTools
# Configurar WSUS después de instalar
wsusutil.exe postinstall CONTENT_DIR=E:\WSUS
# Ver actualizaciones disponibles via wuauclt
wuauclt /detectnow /updatenow
# Verificar actualizaciones instaladas
wmic qfe list full /format:table | sort /r
# Programar reinicio para mantenimiento (3:00 AM)
$action = New-ScheduledTaskAction -Execute "shutdown.exe" -Argument "/r /f /t 60"
$trigger = New-ScheduledTaskTrigger -Once -At "03:00"
Register-ScheduledTask -TaskName "MaintenanceReboot" -Action $action -Trigger $trigger -RunLevel Highest
📊
12 · Monitoring
Monitoreo, Análisis y Alertas del Sistema
Event Viewer, contadores de rendimiento, script de informe de salud y alertas automáticas.
Intermedio
▼
Monitoreo, Análisis y Alertas del Sistema
Event Viewer, contadores de rendimiento, script de informe de salud y alertas automáticas.
# Abrir herramientas de monitoreo GUI
resmon # Monitor de recursos
perfmon # Monitor de rendimiento
eventvwr.msc # Visor de eventos
taskmgr # Administrador de tareas
# ── RECURSOS EN TIEMPO REAL ──────────────────────────────────────
# Uptime del servidor
(Get-Date) - (gcim Win32_OperatingSystem).LastBootUpTime
# CPU — uso actual
Get-WmiObject -Class Win32_Processor | Measure-Object LoadPercentage -Average | Select-Object Average
# CPU — top 10 procesos
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, CPU, Id, WorkingSet
# RAM — resumen
$os = Get-WmiObject Win32_OperatingSystem
Write-Host "Total: $([math]::Round($os.TotalVisibleMemorySize/1MB,2)) GB | Libre: $([math]::Round($os.FreePhysicalMemory/1MB,2)) GB | Usada: $([math]::Round(($os.TotalVisibleMemorySize - $os.FreePhysicalMemory)/1MB,2)) GB"
# Disco — uso por volumen con porcentaje
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="Usado_%";E={[math]::Round((($_.Size-$_.SizeRemaining)/$_.Size)*100,1)}},
HealthStatus | Format-Table -AutoSize
# Servicios críticos detenidos
Get-Service NTDS,DNS,DHCP,Netlogon,W32Time,WinRM |
Where-Object {$_.Status -ne "Running"} |
Select-Object Name, Status, StartType
# Análisis Event Viewer — 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 -AutoSize
# Generar informe de rendimiento (WinSAT)
winsat formalScript de monitoreo continuo (Watch-Server.ps1)
# Monitor de salud con alertas — ejecutar como tarea programada cada hora
$alertas = @()
$os = Get-WmiObject Win32_OperatingSystem
# Verificar CPU alto (>85%)
$cpu = (Get-WmiObject Win32_Processor | Measure-Object LoadPercentage -Average).Average
if ($cpu -gt 85) { $alertas += "⚠ CPU alta: ${cpu}%" }
# Verificar RAM baja (<10% libre)
$ramPct = ($os.FreePhysicalMemory / $os.TotalVisibleMemorySize) * 100
if ($ramPct -lt 10) { $alertas += "⚠ RAM baja: $([math]::Round($ramPct,1))% libre" }
# Verificar disco C: casi lleno (<15% libre)
$c = Get-Volume -DriveLetter C
$cPct = ($c.SizeRemaining / $c.Size) * 100
if ($cPct -lt 15) { $alertas += "⚠ Disco C: casi lleno: $([math]::Round($cPct,1))% libre" }
# Verificar servicios críticos detenidos
Get-Service NTDS,DNS,DHCP,Netlogon | Where-Object {$_.Status -ne "Running"} |
ForEach-Object { $alertas += "🔴 Servicio detenido: $($_.Name)" }
# Mostrar alertas y enviar email si las hay
if ($alertas.Count -gt 0) {
$alertas | ForEach-Object { Write-Host $_ -ForegroundColor Red }
# Send-MailMessage ... (configura SMTP aquí)
} else {
Write-Host "[$(Get-Date)] ✓ Servidor en estado saludable" -ForegroundColor Green
}
🚀
13 · Performance Tuning
Optimización de Rendimiento del Servidor
Plan de energía, memoria virtual, servicios innecesarios, NUMA y configuración de Hyper-V.
Avanzado
▼
Optimización de Rendimiento del Servidor
Plan de energía, memoria virtual, servicios innecesarios, NUMA y configuración de Hyper-V.
# Plan de energía High Performance (obligatorio en servidores físicos)
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
powercfg /getactivescheme
# Deshabilitar hibernación
powercfg /hibernate off
# Configurar memoria virtual automática
$cs = Get-WmiObject -Class Win32_ComputerSystem
$cs.AutomaticManagedPagefile = $false
$cs.Put()
# Deshabilitar indexación en disco de datos
Set-WmiInstance -Class Win32_Volume -Filter 'DriveLetter = "E:"' `
-Arguments @{IndexingEnabled=$false}
# Ajuste de memoria del kernel para cargas de trabajo de servidor
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v DisablePagingExecutive /t REG_DWORD /d 1 /f
# Para servidores de base de datos: maximizar rendimiento en segundo plano
reg add "HKLM\SYSTEM\CurrentControlSet\Control\PriorityControl" /v Win32PrioritySeparation /t REG_DWORD /d 18 /f
# Ajustar tamaño de los logs del sistema (recomendado: 512 MB cada uno)
wevtutil sl System /ms:524288000
wevtutil sl Application /ms:524288000
wevtutil sl Security /ms:1073741824
# Deshabilitar servicios no necesarios en servidor de producción
$svc_off = @("XblAuthManager","XblGameSave","WSearch","Fax","SysMain")
$svc_off | ForEach-Object {
Get-Service $_ -ErrorAction SilentlyContinue | Set-Service -StartupType Disabled
Stop-Service $_ -Force -ErrorAction SilentlyContinue
}
# Verificar fragmentación de AD (mantenimiento)
# Ejecutar defrag de NTDS en modo offline (desde DSRM)
:: ntdsutil "activate instance ntds" "files" "compact to D:\NTDS_compact" quit quit
🌍
14 · Remote Access & WinRM
Acceso Remoto — RDP, WinRM, SSH y VPN
RDP seguro con NLA, administración remota vía PowerShell Remoting y WinRM, OpenSSH integrado.
Avanzado
▼
Acceso Remoto — RDP, WinRM, SSH y VPN
RDP seguro con NLA, administración remota vía PowerShell Remoting y WinRM, OpenSSH integrado.
RDP seguro — configuración completa
# Habilitar RDP
Set-ItemProperty "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name fDenyTSConnections -Value 0
# Forzar NLA (Network Level Authentication)
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name UserAuthentication -Value 1
# Cifrado mínimo: Alta seguridad
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name MinEncryptionLevel -Value 3
# Limitar RDP a grupo específico
Add-LocalGroupMember -Group "Remote Desktop Users" -Member "EMPRESA\GRP-Admins-IT"
# Ver sesiones RDP activas
quser
query session
# Desconectar sesión RDP por ID
logoff 2 /server:SRV-DC-01PowerShell Remoting y WinRM
# Habilitar WinRM (PowerShell Remoting)
Enable-PSRemoting -Force
# Ver estado de WinRM
winrm quickconfig
# Conectar a servidor remoto
Enter-PSSession -ComputerName "SRV-FILE-01" -Credential (Get-Credential)
# Ejecutar comando en servidor remoto
Invoke-Command -ComputerName "SRV-FILE-01" -ScriptBlock { Get-Service | Where-Object Status -eq Running }
# Ejecutar script en múltiples servidores a la vez
$servidores = @("SRV-FILE-01", "SRV-PRINT-01", "SRV-APP-01")
Invoke-Command -ComputerName $servidores -ScriptBlock {
[PSCustomObject]@{
Servidor = $env:COMPUTERNAME
Uptime = ((Get-Date) - (gcim Win32_OperatingSystem).LastBootUpTime).ToString("dd'd 'hh'h'")
CPU_Pct = (Get-WmiObject Win32_Processor | Measure-Object LoadPercentage -Average).Average
}
}OpenSSH integrado en WS2022
# Instalar OpenSSH Server (incluido en WS2022)
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# Iniciar y configurar inicio automático
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
# Verificar que el firewall permite SSH
Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP"
# Configurar 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
# Conectar desde cliente Linux/Mac
# ssh administrador@192.168.1.10
🛡️
15 · Windows Firewall Advanced
Firewall Avanzado — Reglas, Puertos y Aislamiento
Gestión completa del firewall: reglas de entrada/salida, perfiles, bloqueo de IPs y exportación de configuración.
Avanzado
▼
Firewall Avanzado — Reglas, Puertos y Aislamiento
Gestión completa del firewall: reglas de entrada/salida, perfiles, bloqueo de IPs y exportación de configuración.
Puertos de referencia para WS2022
| Puerto | Protocolo | Servicio | Perfil | Acción |
|---|---|---|---|---|
| 53 | TCP/UDP | DNS | Domain | Permitir |
| 67–68 | UDP | DHCP | Domain | Permitir |
| 88 | TCP/UDP | Kerberos | Domain | Permitir |
| 135 | TCP | RPC | Domain | Solo LAN |
| 389/636 | TCP/UDP | LDAP/LDAPS | Domain | Permitir |
| 443 | TCP | HTTPS (salida) | All | Permitir salida |
| 445 | TCP | SMB | Domain | Solo LAN |
| 3389 | TCP | RDP | Domain | Bloquear externo |
| 5985 | TCP | WinRM HTTP | Domain | Solo LAN |
| 5986 | TCP | WinRM HTTPS | Domain | Permitir |
# Estado del firewall en todos los perfiles
netsh advfirewall show allprofiles
# Crear regla de entrada para puerto específico (solo LAN)
New-NetFirewallRule `
-DisplayName "SMB interno LAN" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 445 `
-RemoteAddress "192.168.1.0/24" `
-Action Allow `
-Profile Domain,Private `
-Enabled True
# Bloquear IP sospechosa
New-NetFirewallRule -DisplayName "BLOCK-Attacker" `
-Direction Inbound -RemoteAddress "198.51.100.0/24" -Action Block
# Ver reglas activas ordenadas
Get-NetFirewallRule | Where-Object {$_.Enabled -eq "True"} |
Select-Object DisplayName, Direction, Action | Sort-Object Direction | Format-Table
# Exportar configuración completa del firewall
netsh advfirewall export "C:\Backup\Firewall_$(Get-Date -f yyyyMMdd).wfw"
# Importar configuración guardada
netsh advfirewall import "C:\Backup\Firewall_20260315.wfw"
# Abrir consola avanzada de Firewall
wf.msc
☁️
16 · Azure Arc y Gestión Híbrida
Azure Arc — Gestión Híbrida On-Premises + Cloud
Conectar WS2022 a Azure Arc para monitoreo, políticas, actualizaciones y Defender for Cloud.
Avanzado
▼
Azure Arc — Gestión Híbrida On-Premises + Cloud
Conectar WS2022 a Azure Arc para monitoreo, políticas, actualizaciones y Defender for Cloud.
Azure Arc extiende el plano de control de Azure a servidores on-premises. Permite gestionar el servidor WS2022 desde el portal de Azure: aplicar políticas, monitorear con Azure Monitor, usar Defender for Cloud y aplicar Hotpatch (Azure Edition) sin reinicio.
# Instalar el agente Azure Connected Machine
# Descargar desde: https://aka.ms/AzureConnectedMachineAgent
# Conectar servidor a Azure Arc (requiere suscripción Azure)
Connect-AzConnectedMachine `
-ResourceGroupName "rg-servidores" `
-Location "westeurope" `
-SubscriptionId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# Alternativa: Script de incorporación desde el portal de Azure
# Portal Azure → Azure Arc → Servers → Add → Generate script
# Verificar estado del agente Arc
azcmagent show
azcmagent check
# Ver extensiones instaladas
azcmagent extension list
# Instalar extensión de monitoreo (Azure Monitor Agent)
azcmagent extension add --name AzureMonitorWindowsAgent `
--publisher Microsoft.Azure.MonitorAzure Automanage para WS2022
# Una vez conectado a Arc, desde Azure PowerShell:
Import-Module Az
# Ver servidores Arc registrados
Get-AzConnectedMachine -ResourceGroupName "rg-servidores"
# Asignar perfil de Automanage (configura backups, actualizaciones, monitoreo)
New-AzAutomanageConfigurationProfile -ResourceGroupName "rg-servidores" `
-Name "prod-profile" -Location "westeurope"
# Habilitar Azure Update Manager (reemplaza WSUS para entornos híbridos)
# Portal Azure → Azure Update Manager → Machines → Add machines
🐳
17 · Windows Containers
Contenedores Windows — Docker y Kubernetes
Instalar Docker en WS2022, imágenes de contenedor Windows nativas y configuración básica.
Avanzado
▼
Contenedores Windows — Docker y Kubernetes
Instalar Docker en WS2022, imágenes de contenedor Windows nativas y configuración básica.
# Instalar el rol de Contenedores de Windows
Install-WindowsFeature -Name Containers -Restart
# Instalar Docker Engine (después del reinicio)
Install-Module DockerMsftProvider -Repository PSGallery -Force
Install-Package Docker -ProviderName DockerMsftProvider -Force
# Iniciar Docker y habilitarlo
Start-Service Docker
Set-Service -Name Docker -StartupType Automatic
# Verificar versión de Docker
docker version
docker info
# Descargar imagen base de Windows Server Core (WS2022)
docker pull mcr.microsoft.com/windows/servercore:ltsc2022
# Descargar imagen Nano Server (muy ligera)
docker pull mcr.microsoft.com/windows/nanoserver:ltsc2022
# Ejecutar contenedor de prueba
docker run --rm mcr.microsoft.com/windows/servercore:ltsc2022 ipconfig
# Ver contenedores en ejecución
docker ps
# Ver todas las imágenes descargadas
docker images
# Ejemplo: IIS en contenedor
docker run -d -p 8080:80 --name iis-test mcr.microsoft.com/windows/servercore/iis
🔧
18 · Troubleshooting
Resolución de Problemas Frecuentes
Los 15 problemas más comunes en WS2022 con diagnóstico exacto y solución paso a paso.
Variable
▼
Resolución de Problemas Frecuentes
Los 15 problemas más comunes en WS2022 con diagnóstico exacto y solución paso a paso.
| Síntoma | Causa más probable | Solución rápida |
|---|---|---|
| Clientes no pueden autenticarse | Hora desincronizada >5 min (Kerberos) | w32tm /resync /force |
| No se puede unir al dominio | DNS del cliente no apunta al DC | Verificar DNS en NIC del cliente |
| GPO no se aplica | Replicación AD pendiente o enlace GPO incorrecto | gpupdate /force + repadmin /syncall |
| SYSVOL no replica | DFSR detenido o desincronizado | dfsrdiag SyncNow /Membership |
| DNS no resuelve internamente | Zona invertida faltante o PTR records | Verificar zona en DNS Manager + ipconfig /registerdns |
| DHCP no asigna IPs | No autorizado en AD o scope agotado | Add-DhcpServerInDC + verificar rango |
| Carpetas SMB inaccesibles | Firewall bloqueando 445 o permisos NTFS | Verificar regla Firewall + icacls |
| Alto uso de disco C: | WinSxS, logs o actualizaciones antiguas | DISM /StartComponentCleanup /ResetBase |
| WinRM no conecta | Servicio detenido o Firewall | Enable-PSRemoting -Force |
| RDP acceso denegado | Usuario no en grupo Remote Desktop Users | Add-LocalGroupMember -Group "Remote Desktop Users" |
Reparación del sistema operativo
:: Reparación completa (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 después de DISM
:: Diagnóstico completo del DC
dcdiag /test:all /v /f:C:\Logs\dcdiag.txt
:: Ver y reparar replicación AD
repadmin /replsummary
repadmin /showrepl * /errorsonly
repadmin /syncall /AdeP
:: Reparar SYSVOL (DFSR)
dfsrdiag SyncNow /Membership:empresa.local
:: Si el servidor no arranca — WinRE
bootrec /fixmbr
bootrec /fixboot
bootrec /rebuildbcd
:: Restaurar estado del sistema desde backup
wbadmin start systemstaterecovery -version:03/15/2026-02:00 -quiet
✅
19 · Checklist de Mantenimiento
Checklist Completa — Mantenimiento Periódico
Plan de mantenimiento semanal, mensual, trimestral y anual con script de automatización completo.
▼
Checklist Completa — Mantenimiento Periódico
Plan de mantenimiento semanal, mensual, trimestral y anual con script de automatización completo.
📅 Semanal
- ☐ Revisar Event Viewer (errores críticos)
- ☐ Verificar espacio libre en todos los discos (>20%)
- ☐ Confirmar que los backups completaron OK
- ☐
dcdiag /test:Connectivity - ☐ Revisar cuentas AD bloqueadas
- ☐ Comprobar replicación AD:
repadmin /replsummary - ☐ Verificar servicios críticos en ejecución
📆 Mensual
- ☐ Aplicar actualizaciones de seguridad (con backup previo)
- ☐
sfc /scannow+DISM /RestoreHealth - ☐ Revisar usuarios inactivos (>90 días) y deshabilitar
- ☐ Limpiar archivos temporales y caché WU
- ☐ Revisar logs de auditoría de seguridad
- ☐ Test de restauración desde backup (archivo aleatorio)
- ☐ Revisar intentos de login fallidos (Event 4625)
📊 Trimestral
- ☐
dcdiag /test:all /v— diagnóstico completo - ☐ Verificar salud SMART de todos los discos
- ☐ Optimizar base de datos AD (si fragmentación >20%)
- ☐ Renovar contraseñas de cuentas de servicio
- ☐ Revisar reglas del Firewall
- ☐ Revisar membresías de grupos privilegiados (DA, EA)
- ☐ 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
- ☐ Verificar fecha de caducidad de certificados SSL/TLS
- ☐ Revisar licencias (cobertura, fechas, expansión)
- ☐ Actualizar el plan de contingencia y contactos
Script de mantenimiento mensual completo
#requires -RunAsAdministrator
# Script de mantenimiento mensual automatizado para WS2022
# Guardar en C:\Scripts\ y programar como tarea el primer domingo del mes
$log = "C:\Logs\Maintenance\maint_$(Get-Date -f 'yyyyMMdd').log"
New-Item -Path (Split-Path $log) -ItemType Directory -Force | Out-Null
Start-Transcript -Path $log
function Log($msg,$col="White"){ Write-Host "[$(Get-Date -f 'HH:mm:ss')] $msg" -ForegroundColor $col }
Log "═══ MANTENIMIENTO MENSUAL WS2022 — $(Get-Date -f 'dd/MM/yyyy') ═══" Cyan
# 1. Verificar integridad del sistema
Log "[1/7] SFC — verificando archivos del sistema..."
sfc /scannow
# 2. Reparar imagen Windows
Log "[2/7] DISM — reparando imagen de Windows..."
DISM /Online /Cleanup-Image /RestoreHealth
# 3. Limpiar archivos temporales
Log "[3/7] Limpiando archivos temporales..."
@("$env:TEMP\*", "C:\Windows\Temp\*") | ForEach-Object {
Remove-Item $_ -Recurse -Force -ErrorAction SilentlyContinue
}
# 4. Limpiar caché Windows Update
Log "[4/7] Limpiando 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/7] Ejecutando diagnóstico Active Directory..."
dcdiag /test:all /f:C:\Logs\Maintenance\dcdiag_$(Get-Date -f 'yyyyMMdd').txt
repadmin /replsummary >> "$log"
# 6. Optimizar discos
Log "[6/7] Optimizando discos..."
Get-Volume | Where-Object {$_.DriveLetter} | Optimize-Volume -Verbose
# 7. Resumen final
Log "[7/7] Resumen de salud:" Cyan
$os = Get-WmiObject Win32_OperatingSystem
Log "RAM libre: $([math]::Round($os.FreePhysicalMemory/1MB,2)) GB"
Get-Volume | Where-Object {$_.DriveLetter} |
Select-Object DriveLetter, @{N="Libre_GB";E={[math]::Round($_.SizeRemaining/1GB,1)}} |
Format-Table
Log "═══ MANTENIMIENTO COMPLETADO ═══" Green
Stop-Transcript