Windows Server 2019 Essentials — Guía Completa | GPS-971.com

Windows Server 2019 Essentials — Guía Completa | GPS-971.com
GPS-971.com · Guía Técnica · Windows Server 2019

Windows Server 2019
Essentials

Guía completa de instalación, configuración inicial, servicios de red, gestión de usuarios y mantenimiento preventivo para entornos de pequeña y mediana empresa.

📦
18 secciones técnicas
⌨️
120+ comandos CMD/PS
🏢
Hasta 25 usuarios/dispositivos
📅
Soporte hasta Ene 2029
🎯
Nivel Técnico / Administrador
ℹ️
Sobre esta guía: Cubre Windows Server 2019 Essentials en su edición estándar (licencia para hasta 25 usuarios y 50 dispositivos). Muchos comandos son compatibles también con Standard y Datacenter. Ejecuta siempre PowerShell o CMD como Administrador salvo indicación contraria.
⬛ PRE-INSTALACIÓN
📋
00 · Pre-instalación

Requisitos de Hardware y Preparación

Hardware mínimo y recomendado, compatibilidad de drivers y lista de verificación antes de comenzar.

Básico
WS 2019 EssentialsPre-install
🧠

CPU

Mín: 1.4 GHz x64
✦ Rec: 2.0 GHz+ multi-core
💾

RAM

Mín: 512 MB (no GUI)
✦ Rec: 4–8 GB con GUI
🖴

Disco sistema

Mín: 32 GB
✦ Rec: 60 GB SSD
🌐

Red

Mín: 1 NIC 100 Mbps
✦ Rec: 1 Gbps + redundancia
📺

Pantalla

Mín: 800×600 (GUI)
✦ Rec: 1024×768
💿

Instalación

DVD / USB 8 GB+
✦ Rec: USB 3.0 booteable
⚠️
Límite de Essentials: Windows Server 2019 Essentials está licenciado para 25 usuarios y 50 dispositivos máximo. Para más usuarios se requiere Standard o Datacenter. No se puede añadir el rol de Hyper-V en Essentials de forma oficial.

Lista de verificación previa

  • BIOS/UEFI actualizado — Verifica la versión y actualiza si hay versión estable disponible del fabricante.
  • Modo de arranque UEFI activo — Desactiva CSM/Legacy Boot para instalar en GPT (recomendado).
  • Secure Boot — Puedes dejarlo activo; WS2019 es compatible.
  • RAID/Almacenamiento verificado — Si usas RAID por hardware, configura el controlador antes de instalar.
  • Drivers disponibles — Descarga drivers de NIC, RAID y chipset del fabricante del servidor.
  • IP estática planificada — Decide la IP, máscara, gateway y DNS antes de comenzar.
  • Nombre del servidor planificado — Máximo 15 caracteres, sin espacios ni caracteres especiales.
  • Licencia disponible — Clave de producto o acceso a KMS/MAK listo.
  • USB de instalación creado — Con Rufus (GPT + UEFI) o la herramienta de Microsoft.

Crear USB booteable con Rufus

GUI — Rufus
1. Descargar Rufus desde https://rufus.ie 2. Insertar USB de 8 GB o más (se borrará todo) 3. En Rufus seleccionar: Dispositivo: USB insertado Tipo de arranque: Imagen de disco → Seleccionar ISO Esquema part.: GPT Sistema destino: UEFI (no CSM) Sistema archivos: NTFS 4. Clic en EMPEZAR y confirmar el borrado

Comprobar integridad del ISO descargado

PowerShell
# Verificar hash SHA256 del ISO (compara con el publicado por Microsoft) Get-FileHash "C:\Downloads\WS2019_Essentials.iso" -Algorithm SHA256
⬛ INSTALACIÓN
💿
01 · Instalación paso a paso

Instalación de Windows Server 2019 Essentials

Proceso completo de instalación desde cero: arranque, particionado, y primera configuración.

Intermedio
WS 2019 Essentials⚠ Copia de seguridad previa
01 Boot USB
02 Idioma
03 Edición
04 Partición
05 Instalación
06 OOBE
07 Dashboard

Fase 1 — Arranque desde USB

  1. Conecta el USB booteable e inicia el servidor. Pulsa la tecla de boot menu (generalmente F11, F12 o ESC según fabricante).
  2. Selecciona el USB en el menú de arranque. Si no aparece, verifica que UEFI boot esté habilitado y CSM desactivado.
  3. En la pantalla de Windows Setup: selecciona Español (España), formato de hora y moneda, y teclado.
  4. Clic en Instalar ahora.
  5. Introduce la clave de producto o selecciona «No tengo clave de producto» (se puede activar después).

Fase 2 — Selección de edición y tipo de instalación

  • Selecciona Windows Server 2019 Essentials (Experiencia de escritorio) — esta es la versión con GUI completa.
  • Tipo de instalación: selecciona siempre Personalizada: instalar solo Windows para una instalación limpia.
⚠️
Experiencia de escritorio vs. Server Core: Essentials solo tiene soporte completo con la experiencia de escritorio (GUI). Server Core no está pensado para esta edición ya que el Dashboard requiere interfaz gráfica.

Fase 3 — Particionado del disco (recomendado)

GUI — Windows Setup
Esquema recomendado para un servidor con un SSD de 120 GB: Partición 1 (EFI): 300 MB — Creada automáticamente Partición 2 (MSR): 16 MB — Creada automáticamente Partición 3 (Sistema): 60 GB — C:\ — Sistema operativo Partición 4 (Datos): ~59 GB — D:\ — Datos / Carpetas compartidas Consejo: NUNCA almacenes datos de usuarios en C:\ Así puedes reinstalar el SO sin perder datos.

Fase 4 — Después del primer arranque (OOBE)

  1. Establece una contraseña de Administrador robusta: mínimo 12 caracteres, mayúsculas, minúsculas, números y símbolo. Anótala en un gestor de contraseñas.
  2. Windows arrancará y ejecutará automáticamente el Asistente de configuración de Essentials al primer inicio de sesión.
  3. En el asistente: introduce el nombre de la empresa, nombre del dominio interno (ej: empresa.local) y datos del administrador.
  4. Espera a que el asistente configure Active Directory, DNS y DHCP. Este proceso tarda entre 15 y 30 minutos.
💡
Nombre del dominio: Usa un sufijo .local para redes internas (ej: miempresa.local). Si ya tienes un dominio real en Internet (ej: miempresa.com), considera usarlo aquí también para evitar conflictos de DNS con el tiempo. No uses solo el nombre NetBIOS sin sufijo.

Verificar instalación desde CMD

CMD — Admin
:: Verificar versión y edición instalada winver :: Ver detalles desde línea de comandos wmic os get Caption, Version, BuildNumber, OSArchitecture :: Comprobar estado de activación slmgr /dli :: Ver información completa de licencia slmgr /dlv
⬛ CONFIGURACIÓN INICIAL
⚙️
02 · Post-instalación

Configuración Inicial del Servidor

Nombre del equipo, zona horaria, drivers, actualizaciones iniciales y hardening básico.

Intermedio
WS 2019 EssentialsPowerShell⚠ Admin

Nombre del servidor y zona horaria

PowerShell — Admin
# Cambiar nombre del servidor (requiere reinicio) Rename-Computer -NewName "SRV-EMPRESA-01" -Restart # Ver nombre actual $env:COMPUTERNAME # Configurar zona horaria (España peninsular) Set-TimeZone -Id "Romance Standard Time" # Ver zonas horarias disponibles Get-TimeZone -ListAvailable | Where-Object {$_.Id -like "*Spain*"} # Sincronizar hora con servidor NTP externo w32tm /config /manualpeerlist:"pool.ntp.org" /syncfromflags:manual /reliable:YES /update net stop w32time net start w32time w32tm /resync /force

Instalar drivers y verificar hardware

PowerShell — Admin
# Ver dispositivos sin driver correcto Get-PnpDevice | Where-Object {$_.Status -ne "OK"} # Ver todos los dispositivos y estado Get-PnpDevice | Select-Object Status, Class, FriendlyName | Sort-Object Status # Instalar driver de archivo INF manualmente pnputil /add-driver "C:\Drivers\NIC\driver.inf" /install # Ver todos los drivers instalados Get-WindowsDriver -Online | Select-Object Driver, ClassName, ProviderName, Date

Configurar Server Manager — Tareas iniciales

  • Abrir Server Manager (se abre automáticamente) → Panel de control principal del servidor.
  • Administración de servidor local → Verifica que el Firewall esté activo, IE Enhanced Security configurado y actualizaciones habilitadas.
  • Cambiar a «No iniciar Server Manager automáticamente» en producción si prefieres (Manage → Server Manager Properties).
CMD — Admin
:: Abrir Server Manager desde CMD ServerManager.exe :: Abrir herramientas administrativas control admintools :: Verificar roles instalados Get-WindowsFeature | Where-Object {$_.InstallState -eq "Installed"} :: Ver todos los roles disponibles Get-WindowsFeature | Format-Table -AutoSize

Política de contraseñas y seguridad básica

CMD — Admin
:: Configurar política de contraseñas local net accounts /minpwlen:12 /maxpwage:90 /minpwage:1 /uniquepw:5 :: Deshabilitar cuenta Administrador local por defecto (usa una con nombre diferente) net user Administrator /active:no :: Ver política de contraseñas actual net accounts :: Abrir editor de directivas de grupo local gpedit.msc :: Abrir herramienta de seguridad local secpol.msc
🌐
03 · Networking

Configuración de Red — IP, DNS y DHCP

IP estática del servidor, configuración de DNS local, DHCP para clientes y verificación de conectividad.

Intermedio
WS 2019 EssentialsPowerShell⚠ Admin
⚠️
Importante: El servidor debe tener IP estática. Si cambia de IP, los clientes del dominio perderán la conexión. Configura la IP estática antes de unir equipos al dominio.

Configurar IP estática

PowerShell — Admin
# Ver adaptadores de red disponibles Get-NetAdapter | Select-Object Name, InterfaceIndex, Status, LinkSpeed # Asignar IP estática (ajusta los valores a tu red) New-NetIPAddress -InterfaceAlias "Ethernet" ` -IPAddress "192.168.1.10" ` -PrefixLength 24 ` -DefaultGateway "192.168.1.1" # Configurar DNS (el servidor es su propio DNS primario) Set-DnsClientServerAddress -InterfaceAlias "Ethernet" ` -ServerAddresses "192.168.1.10","8.8.8.8" # Verificar configuración Get-NetIPConfiguration

Gestión del servidor DHCP

PowerShell — Admin
# Instalar rol DHCP si no está instalado Install-WindowsFeature DHCP -IncludeManagementTools # Autorizar el servidor DHCP en AD Add-DhcpServerInDC # Crear scope (rango de IPs para clientes) Add-DhcpServerv4Scope -Name "Red Local" ` -StartRange "192.168.1.100" ` -EndRange "192.168.1.200" ` -SubnetMask "255.255.255.0" ` -State Active # Configurar opciones del scope (gateway y DNS) Set-DhcpServerv4OptionValue -ScopeId "192.168.1.0" ` -Router "192.168.1.1" ` -DnsServer "192.168.1.10" ` -DnsDomain "empresa.local" # Excluir IPs de equipos con IP estática Add-DhcpServerv4ExclusionRange -ScopeId "192.168.1.0" ` -StartRange "192.168.1.1" ` -EndRange "192.168.1.50" # Ver leases activos Get-DhcpServerv4Lease -ScopeId "192.168.1.0" # Abrir consola DHCP gráfica dhcpmgmt.msc

Verificación de red y DNS

CMD / PowerShell
:: Comprobar conectividad básica ping 8.8.8.8 ping google.com :: Ver tabla de rutas route print :: Verificar que el servicio DNS responde nslookup empresa.local 192.168.1.10 nslookup google.com 192.168.1.10 :: Ver zonas DNS configuradas Get-DnsServerZone :: Limpiar caché DNS del servidor Clear-DnsServerCache :: Ver estadísticas del servidor DNS Get-DnsServerStatistics
⬛ USUARIOS Y DIRECTORIO ACTIVO
👤
04 · Gestión de Usuarios

Usuarios, Grupos y Permisos

Crear, modificar y gestionar cuentas de usuario y grupos de seguridad desde el Dashboard y PowerShell.

Intermedio
WS 2019 EssentialsPowerShell⚠ Admin

Crear usuarios desde PowerShell

PowerShell — Admin
# Crear usuario en Active Directory New-ADUser ` -Name "Juan García" ` -SamAccountName "jgarcia" ` -UserPrincipalName "jgarcia@empresa.local" ` -GivenName "Juan" ` -Surname "García" ` -DisplayName "Juan García" ` -Department "Ventas" ` -Office "Madrid" ` -AccountPassword (ConvertTo-SecureString "P@ssw0rd2026!" -AsPlainText -Force) ` -Enabled $true ` -PasswordNeverExpires $false ` -ChangePasswordAtLogon $true # Crear usuario local (no en AD) New-LocalUser -Name "LocalAdmin" ` -Password (ConvertTo-SecureString "S3gura!2026" -AsPlainText -Force) ` -FullName "Administrador Local" ` -Description "Cuenta admin de emergencia" # Listar todos los usuarios de AD Get-ADUser -Filter * | Select-Object Name, SamAccountName, Enabled # Buscar usuario específico Get-ADUser -Identity "jgarcia" -Properties * # Deshabilitar usuario Disable-ADAccount -Identity "jgarcia" # Eliminar usuario Remove-ADUser -Identity "jgarcia" -Confirm:$false # Restablecer contraseña Set-ADAccountPassword -Identity "jgarcia" ` -NewPassword (ConvertTo-SecureString "NuevoP@ss2026" -AsPlainText -Force) ` -Reset

Gestión de grupos

PowerShell — Admin
# Crear grupo de seguridad New-ADGroup -Name "GRP-Ventas" ` -GroupScope Global ` -GroupCategory Security ` -Description "Grupo del departamento de Ventas" # Añadir usuario a grupo Add-ADGroupMember -Identity "GRP-Ventas" -Members "jgarcia" # Ver miembros del grupo Get-ADGroupMember -Identity "GRP-Ventas" # Ver grupos a los que pertenece un usuario Get-ADPrincipalGroupMembership -Identity "jgarcia" # Eliminar usuario de grupo Remove-ADGroupMember -Identity "GRP-Ventas" -Members "jgarcia" -Confirm:$false

Crear múltiples usuarios desde CSV (bulk)

PowerShell — Admin
# Formato del CSV (usuarios.csv): # Name,SamAccountName,Department,Password # María López,mlopez,Contabilidad,P@ss2026! # Importar usuarios desde CSV Import-Csv "C:\Admin\usuarios.csv" | ForEach-Object { New-ADUser ` -Name $_.Name ` -SamAccountName $_.SamAccountName ` -Department $_.Department ` -AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -Force) ` -Enabled $true ` -ChangePasswordAtLogon $true Write-Host "Creado: $($_.Name)" -ForegroundColor Green }
📁
05 · Storage

Almacenamiento — Carpetas Compartidas y Permisos

Carpetas compartidas en red, permisos NTFS vs. compartición, cuotas de disco y mapeo en clientes.

Intermedio
WS 2019 EssentialsPowerShell⚠ Admin

Crear carpetas compartidas

PowerShell — Admin
# Crear estructura de carpetas en D:\ New-Item -Path "D:\Compartido\Empresa" -ItemType Directory New-Item -Path "D:\Compartido\Ventas" -ItemType Directory New-Item -Path "D:\Compartido\RRHH" -ItemType Directory New-Item -Path "D:\Usuarios" -ItemType Directory # Compartir carpeta en red New-SmbShare -Name "Empresa" ` -Path "D:\Compartido\Empresa" ` -FullAccess "Domain Admins" ` -ReadAccess "Domain Users" ` -Description "Carpeta compartida general" # Compartir con acceso solo a un grupo New-SmbShare -Name "Ventas" ` -Path "D:\Compartido\Ventas" ` -FullAccess "Domain Admins" ` -ChangeAccess "GRP-Ventas" # Listar carpetas compartidas Get-SmbShare # Ver conexiones activas a carpetas compartidas Get-SmbSession # Eliminar carpeta compartida (sin borrar archivos) Remove-SmbShare -Name "Ventas" -Confirm:$false

Permisos NTFS (el modelo correcto: AGDLP)

Principio AGDLP

Acuenta → Grupo Global → Domain Local group → Permission. Asigna siempre los permisos NTFS a grupos de dominio local, no directamente a usuarios ni a grupos globales.

PowerShell — Admin
# Ver permisos NTFS de una carpeta Get-Acl "D:\Compartido\Ventas" | Format-List # Añadir permiso de escritura a un grupo $acl = Get-Acl "D:\Compartido\Ventas" $rule = New-Object System.Security.AccessControl.FileSystemAccessRule( "empresa\GRP-Ventas", "Modify", "ContainerInherit,ObjectInherit", "None", "Allow") $acl.SetAccessRule($rule) Set-Acl "D:\Compartido\Ventas" $acl # Aplicar permisos de forma recursiva con icacls icacls "D:\Compartido\Ventas" /grant "empresa\GRP-Ventas:(OI)(CI)M" /T # Quitar permisos heredados y asignar solo los necesarios icacls "D:\Compartido\RRHH" /inheritance:r icacls "D:\Compartido\RRHH" /grant "empresa\GRP-RRHH:(OI)(CI)M" icacls "D:\Compartido\RRHH" /grant "empresa\Domain Admins:(OI)(CI)F"

Mapear unidades en clientes (GPO)

PowerShell — Cliente
# Mapear unidad de red manualmente en cliente net use Z: \\SRV-EMPRESA-01\Empresa /persistent:yes net use V: \\SRV-EMPRESA-01\Ventas /persistent:yes # Con PowerShell (más moderno) New-PSDrive -Name Z -PSProvider FileSystem ` -Root "\\SRV-EMPRESA-01\Empresa" -Persist # Desconectar unidad net use Z: /delete
🗄️
06 · Active Directory

Active Directory — Dominio y Directivas de Grupo

Gestión del dominio, OUs, GPOs y unión de equipos clientes al dominio corporativo.

Avanzado
WS 2019 EssentialsAD DS⚠ Admin

Estructura de Unidades Organizativas (OUs)

PowerShell — Admin
# Ver estructura actual de AD Get-ADOrganizationalUnit -Filter * | Select-Object Name, DistinguishedName # Crear estructura de OUs recomendada $base = "DC=empresa,DC=local" New-ADOrganizationalUnit -Name "_Empresa" -Path $base New-ADOrganizationalUnit -Name "Usuarios" -Path "OU=_Empresa,$base" New-ADOrganizationalUnit -Name "Equipos" -Path "OU=_Empresa,$base" New-ADOrganizationalUnit -Name "Grupos" -Path "OU=_Empresa,$base" New-ADOrganizationalUnit -Name "Cuentas de Servicio" -Path "OU=_Empresa,$base" # Mover usuario a OU específica Move-ADObject -Identity "CN=Juan García,CN=Users,DC=empresa,DC=local" ` -TargetPath "OU=Usuarios,OU=_Empresa,DC=empresa,DC=local"

Directivas de Grupo (GPO) esenciales

CMD / PowerShell
:: Abrir consola de GPO gpmc.msc :: Forzar actualización de directivas en el servidor gpupdate /force :: Forzar actualización en cliente remoto Invoke-GPUpdate -Computer "PC-USUARIO01" -Force :: Ver directivas aplicadas en el equipo local gpresult /r :: Generar informe HTML de directivas gpresult /h C:\Admin\gpresult.html /f :: Listar todas las GPOs del dominio Get-GPO -All | Select-Object DisplayName, GpoStatus, CreationTime :: Crear nueva GPO New-GPO -Name "GPO-Usuarios-Base" -Comment "Configuración base para todos los usuarios" :: Vincular GPO a OU New-GPLink -Name "GPO-Usuarios-Base" ` -Target "OU=Usuarios,OU=_Empresa,DC=empresa,DC=local"

Unir equipo cliente al dominio

PowerShell — Admin (en el cliente)
# Unir equipo al dominio (ejecutar en el equipo cliente) Add-Computer -DomainName "empresa.local" ` -Credential (Get-Credential) ` -OUPath "OU=Equipos,OU=_Empresa,DC=empresa,DC=local" ` -Restart # Ver equipos unidos al dominio (desde el servidor) Get-ADComputer -Filter * | Select-Object Name, OperatingSystem, LastLogonDate # Eliminar equipo del dominio Remove-ADComputer -Identity "PC-USUARIO01" -Confirm:$false
⬛ SERVICIOS Y ROLES
🖨️
07 · Print Server

Servidor de Impresión

Instalar y gestionar el rol de impresión, compartir impresoras en red y gestionar colas.

Intermedio
WS 2019 EssentialsPowerShell
PowerShell — Admin
# Instalar rol de servidor de impresión Install-WindowsFeature Print-Server -IncludeManagementTools # Abrir administrador de impresión printmanagement.msc # Listar impresoras instaladas Get-Printer | Select-Object Name, PortName, DriverName, Shared, ShareName # Añadir impresora por puerto TCP/IP Add-PrinterPort -Name "IP_192.168.1.50" -PrinterHostAddress "192.168.1.50" Add-Printer -Name "HP LaserJet Oficina" ` -PortName "IP_192.168.1.50" ` -DriverName "HP Universal Printing PCL 6" # Compartir impresora en red Set-Printer -Name "HP LaserJet Oficina" -Shared $true -ShareName "ImpOfi" # Ver cola de impresión Get-PrintJob -PrinterName "HP LaserJet Oficina" # Limpiar cola de impresión atascada net stop spooler del /Q /F /S C:\Windows\System32\spool\PRINTERS\* net start spooler
⬛ SEGURIDAD
🔒
08 · Security Hardening

Hardening y Seguridad del Servidor

Auditoría, directivas de bloqueo, desactivación de servicios innecesarios y buenas prácticas de seguridad.

Avanzado
WS 2019 EssentialsPowerShell🔴 Crítico

Directiva de bloqueo de cuentas

CMD — Admin
:: Configurar bloqueo de cuenta tras 5 intentos fallidos net accounts /lockoutthreshold:5 /lockoutduration:15 /lockoutwindow:15 :: Ver directivas de cuenta actuales net accounts :: Ver cuentas bloqueadas en AD Search-ADAccount -LockedOut | Select-Object Name, SamAccountName :: Desbloquear cuenta de usuario Unlock-ADAccount -Identity "jgarcia" :: Ver intentos de inicio de sesión fallidos (últimas 24h) Get-EventLog -LogName Security -InstanceId 4625 ` -After (Get-Date).AddHours(-24) | Select-Object TimeGenerated, Message

Auditoría de eventos de seguridad

CMD — Admin
:: Activar auditoría de inicio de sesión auditpol /set /subcategory:"Logon" /success:enable /failure:enable :: Activar auditoría de cambios en objetos AD auditpol /set /subcategory:"Directory Service Changes" /success:enable :: Activar auditoría de acceso a archivos auditpol /set /subcategory:"File System" /success:enable /failure:enable :: Ver configuración de auditoría actual auditpol /get /category:* :: IDs de eventos de seguridad importantes: :: 4624 = Inicio de sesión correcto :: 4625 = Inicio de sesión fallido :: 4648 = Inicio de sesión con credenciales explícitas :: 4720 = Cuenta de usuario creada :: 4726 = Cuenta de usuario eliminada :: 4740 = Cuenta bloqueada :: 4756 = Miembro añadido a grupo privilegiado :: Buscar evento específico en el log de seguridad Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4740} -MaxEvents 20

Deshabilitar servicios y protocolos inseguros

PowerShell — Admin
# Deshabilitar SMBv1 (vulnerable a WannaCry y EternalBlue) Set-SmbServerConfiguration -EnableSMB1Protocol $false -Confirm:$false # Verificar que SMBv1 está desactivado Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol, EnableSMB2Protocol # Deshabilitar telnet Disable-WindowsOptionalFeature -Online -FeatureName TelnetClient # Deshabilitar RDP si no se usa (puerta de entrada muy atacada) reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f # Si necesitas RDP, cambia el puerto por defecto reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 3390 /f # Verificar versiones de TLS habilitadas Get-TlsCipherSuite | Select-Object Name | Format-Table
⬛ BACKUP Y ACTUALIZACIONES
💾
09 · Backup & Recovery

Copia de Seguridad y Recuperación

Windows Server Backup, programar copias automáticas, restaurar desde backup y recuperación ante desastres.

Avanzado
WS 2019 EssentialsPowerShell🔴 Crítico
🔴
Regla 3-2-1: Mantén 3 copias de los datos, en 2 medios distintos, con al menos 1 copia offsite (NAS externo, nube). La única copia en el mismo servidor NO es un backup válido.

Instalar Windows Server Backup

PowerShell — Admin
# Instalar característica de backup Install-WindowsFeature Windows-Server-Backup -IncludeManagementTools # Abrir consola gráfica de backup wbadmin get versions # Ver estado del último backup wbadmin get status

Configurar backup programado completo

CMD — Admin
:: Backup completo diario a disco externo E: a las 23:00 wbadmin enable backup -addtarget:E: -schedule:23:00 -include:C:,D: -quiet :: Backup completo inmediato a disco externo wbadmin start backup -backuptarget:E: -include:C:,D: -allCritical -quiet :: Backup solo del estado del sistema (AD, boot, registro) wbadmin start systemstatebackup -backuptarget:E: -quiet :: Backup a carpeta de red (UNC path) wbadmin start backup ` -backuptarget:\\NAS-EMPRESA\Backups\Servidor ` -include:C:,D: ` -user:empresa\AdminBackup ` -password:P@ssBackup2026 ` -quiet :: Listar versiones de backup disponibles wbadmin get versions :: Restaurar archivo específico desde backup wbadmin start recovery -version:03/15/2026-23:00 ` -itemtype:File ` -items:D:\Compartido\Empresa\archivo.xlsx ` -recoveryTarget:D:\Restaurados ` -quiet

Script PowerShell de backup automatizado

PowerShell — Script (backup-diario.ps1)
# Script de backup con log y notificación de errores # Guardar como C:\Scripts\backup-diario.ps1 # Programar con Tarea programada a las 23:00 $fecha = Get-Date -Format "yyyyMMdd_HHmm" $logFile = "C:\Scripts\Logs\backup_$fecha.log" $destino = "\\NAS-EMPRESA\Backups\Servidor" Start-Transcript -Path $logFile # Ejecutar backup Write-Host "[$(Get-Date)] Iniciando backup..." wbadmin start backup -backuptarget:$destino -include:C:,D: -allCritical -quiet if ($LASTEXITCODE -eq 0) { Write-Host "[$(Get-Date)] BACKUP COMPLETADO CON ÉXITO" -ForegroundColor Green } else { Write-Host "[$(Get-Date)] ERROR EN EL BACKUP - Código: $LASTEXITCODE" -ForegroundColor Red # Enviar email de alerta (requiere Send-MailMessage o SMTP configurado) } # Eliminar logs de más de 30 días Get-ChildItem "C:\Scripts\Logs\" -Filter "*.log" | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)} | Remove-Item -Force Stop-Transcript
🔄
10 · Windows Update

Gestión de Actualizaciones del Servidor

WSUS, actualización controlada, política de reinicios y gestión de actualizaciones de seguridad críticas.

Intermedio
WS 2019 EssentialsPowerShell⚠ Planificar reinicio
⚠️
En servidores de producción: NUNCA apliques actualizaciones sin haber realizado un backup previo y haber probado en un entorno de pruebas si es posible. Programa mantenimientos en horario de baja actividad.
PowerShell — Admin
# Instalar módulo PSWindowsUpdate Install-Module PSWindowsUpdate -Force Import-Module PSWindowsUpdate # Ver actualizaciones disponibles Get-WindowsUpdate # Instalar solo actualizaciones de seguridad Install-WindowsUpdate -Category "Security Updates" -AcceptAll -AutoReboot # Instalar todas las actualizaciones Install-WindowsUpdate -AcceptAll -AutoReboot # Instalar sin reiniciar (para hacerlo en mantenimiento) Install-WindowsUpdate -AcceptAll -IgnoreReboot # Ver historial de actualizaciones instaladas Get-WUHistory | Select-Object -First 20 Date, Title, Result # Verificar actualizaciones instaladas desde CMD wmic qfe list full /format:table # Programar reinicio para las 3:00 AM shutdown /r /t 0 /f :: reinicio inmediato at 03:00 shutdown /r /f :: reinicio programado a las 3:00
⬛ MONITOREO Y RENDIMIENTO
📊
11 · Monitoring

Monitoreo y Análisis del Sistema

Visor de eventos, contadores de rendimiento, alertas y salud general del servidor.

Intermedio
WS 2019 EssentialsPowerShell

Monitoreo de recursos en tiempo real

PowerShell
# Abrir Monitor de recursos (GUI) resmon # Abrir Monitor de rendimiento perfmon # CPU — top 10 procesos Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, CPU, Id # RAM — uso actual y disponible $os = Get-WmiObject Win32_OperatingSystem Write-Host "RAM Total: $([math]::Round($os.TotalVisibleMemorySize/1MB,2)) GB" Write-Host "RAM Libre: $([math]::Round($os.FreePhysicalMemory/1MB,2)) GB" Write-Host "RAM Usada: $([math]::Round(($os.TotalVisibleMemorySize - $os.FreePhysicalMemory)/1MB,2)) GB" # Disco — espacio por volumen Get-Volume | Select-Object DriveLetter, FileSystemLabel, @{N="Total_GB";E={[math]::Round($_.Size/1GB,1)}}, @{N="Free_GB";E={[math]::Round($_.SizeRemaining/1GB,1)}}, @{N="Used_%";E={[math]::Round((($_.Size-$_.SizeRemaining)/$_.Size)*100,1)}}, HealthStatus # Servicios detenidos que deberían estar activos Get-Service | Where-Object {$_.Status -eq "Stopped" -and $_.StartType -eq "Automatic"} # Tiempo de actividad del servidor (Get-Date) - (gcim Win32_OperatingSystem).LastBootUpTime

Análisis del Visor de eventos (Event Viewer)

PowerShell
# Abrir visor de eventos eventvwr.msc # Últimos 20 errores críticos del sistema Get-WinEvent -FilterHashtable @{LogName='System'; Level=1,2} -MaxEvents 20 | Select-Object TimeCreated, LevelDisplayName, Message # Errores de aplicaciones Get-WinEvent -FilterHashtable @{LogName='Application'; Level=2} -MaxEvents 20 | Select-Object TimeCreated, ProviderName, Message # Exportar log de sistema a CSV Get-WinEvent -LogName System -MaxEvents 500 | Export-Csv "C:\Admin\system-log-$(Get-Date -f 'yyyyMMdd').csv" -NoTypeInformation # Limpiar logs del visor de eventos (mantenimiento) Get-WinEvent -ListLog * | Where-Object {$_.IsEnabled} | ForEach-Object {[System.Diagnostics.Eventing.Reader.EventLogSession]::GlobalSession.ClearLog($_.LogName)}

Script de informe de salud diario

PowerShell — Script (health-report.ps1)
# Generar informe de salud del servidor en HTML $fecha = Get-Date -Format "dd/MM/yyyy HH:mm" $os = Get-WmiObject Win32_OperatingSystem $ram_gb = [math]::Round($os.TotalVisibleMemorySize/1MB,2) $free_g = [math]::Round($os.FreePhysicalMemory/1MB,2) $uptime = ((Get-Date) - $os.ConvertToDateTime($os.LastBootUpTime)).ToString("dd'd 'hh'h 'mm'm'") $discos = Get-Volume | Where-Object {$_.DriveLetter} | Select-Object DriveLetter, @{N="Total";E={[math]::Round($_.Size/1GB,1)}}, @{N="Libre";E={[math]::Round($_.SizeRemaining/1GB,1)}} $errores = (Get-WinEvent -FilterHashtable @{LogName='System';Level=2; StartTime=(Get-Date).AddHours(-24)} -ErrorAction SilentlyContinue).Count Write-Host "=== INFORME $fecha ===" Write-Host "Uptime : $uptime" Write-Host "RAM : $free_g GB libres de $ram_gb GB" Write-Host "Errores : $errores en las últimas 24h" $discos | ForEach-Object { Write-Host "Disco $($_.DriveLetter): $($_.Libre)/$($_.Total) GB" }
🚀
12 · Performance

Optimización de Rendimiento del Servidor

Ajustes de memoria virtual, priorización de servicios, SSD y configuración del plan de energía para servidores.

Avanzado
WS 2019 EssentialsPowerShell⚠ Admin
PowerShell — Admin
# Plan de energía: "Alto rendimiento" (siempre para servidores físicos) powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c powercfg /getactivescheme # Deshabilitar hibernación (innecesaria en servidores) powercfg /hibernate off # Ajustar memoria virtual automáticamente $os = Get-WmiObject -Class Win32_OperatingSystem $cs = Get-WmiObject -Class Win32_ComputerSystem $cs.AutomaticManagedPagefile = $false $cs.Put() # Deshabilitar indexación en unidades de datos (D:) Set-WmiInstance -Class Win32_Volume -Filter 'DriveLetter = "D:"' ` -Arguments @{IndexingEnabled=$false} # Limpiar caché de DNS del servidor Clear-DnsServerCache # Servicios que pueden desactivarse de forma segura en WS Essentials # (solo si se confirma que no se usan) $servicios_opcionales = @( "XblAuthManager", # Xbox Live Auth "XblGameSave", # Xbox Live Game Save "WSearch", # Windows Search (si no se indexa) "Fax" # Fax ) $servicios_opcionales | ForEach-Object { Set-Service -Name $_ -StartupType Disabled -ErrorAction SilentlyContinue Stop-Service -Name $_ -Force -ErrorAction SilentlyContinue }
⬛ RESOLUCIÓN DE PROBLEMAS
🔧
13 · Troubleshooting

Resolución de Problemas Comunes

Los problemas más frecuentes en WS 2019 Essentials y sus soluciones paso a paso.

Avanzado
WS 2019 EssentialsTroubleshooting
ProblemaCausa más comúnSolución rápida
Clientes no encuentran el servidorDNS mal configurado en clientesVerificar que el DNS del cliente apunta a la IP del servidor
No se puede unir al dominioHora desincronizada (>5 min) o DNS incorrectow32tm /resync + verificar DNS
Carpetas compartidas inaccesiblesSMB bloqueado por Firewall o permisosVerificar regla Firewall SMB y permisos NTFS
Servicio DHCP no asigna IPsNo autorizado en AD o scope inactivoAdd-DhcpServerInDC y verificar scope
Dashboard no cargaServicio Windows Server Essentials detenidonet start WseEssentialsMgmt
Alto uso de CPU constanteAntivirus escaneando, WU actualizando, o proceso zombieGet-Process | Sort CPU -Desc | Select -First 10
Disco C: casi llenoLogs, actualizaciones antiguas, WinSxSDISM /StartComponentCleanup + limpiar TEMP

Reparar Active Directory

CMD — Admin
:: Verificar integridad de la base de datos de AD ntdsutil :: Dentro de ntdsutil: :: activate instance ntds :: files :: integrity :: quit :: Verificar replicación de AD (si hay más DCs) repadmin /showrepl repadmin /replsummary :: Verificar estado general del DC dcdiag /test:all /v :: Forzar replicación AD repadmin /syncall /AdeP :: Reparar archivos del sistema (siempre el primer paso) sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth

Problemas de red y conectividad

CMD — Admin
:: Reset completo de red ipconfig /flushdns ipconfig /registerdns netsh winsock reset netsh int ip reset :: Verificar que el servidor se registra en DNS nslookup SRV-EMPRESA-01 :: Ver sesiones abiertas en carpetas compartidas net session :: Ver archivos abiertos en carpetas compartidas net file :: Ver conexiones de red activas con proceso netstat -b -o -n
⬛ ACCESO REMOTO Y SERVICIOS ADICIONALES
🌍
14 · Remote Access

Acceso Remoto — RDS y VPN

Escritorio Remoto seguro, DirectAccess simplificado y alternativas VPN para acceso desde fuera de la oficina.

Avanzado
WS 2019 EssentialsPowerShell⚠ Seguridad crítica
🔴
Seguridad en RDP: Nunca expongas el puerto RDP (3389) directamente a Internet. Usa siempre una VPN o un Gateway RDS. Cambia el puerto por defecto si lo debes exponer, activa la autenticación a nivel de red (NLA) y usa 2FA.

Configurar RDP de forma segura

PowerShell — Admin
# Habilitar Escritorio Remoto Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" ` -Name fDenyTSConnections -Value 0 # Activar autenticación a nivel de red (NLA) — obligatoria Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" ` -Name UserAuthentication -Value 1 # Cambiar puerto RDP por defecto (evitar escaneos automáticos) Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" ` -Name PortNumber -Value 3390 # Abrir el nuevo puerto en el Firewall New-NetFirewallRule -DisplayName "RDP Custom Port" ` -Direction Inbound -Protocol TCP -LocalPort 3390 -Action Allow # Añadir usuario al grupo de Escritorio Remoto Add-LocalGroupMember -Group "Remote Desktop Users" -Member "empresa\jgarcia" # Ver usuarios con acceso RDP Get-LocalGroupMember -Group "Remote Desktop Users" # Ver sesiones RDP activas query session quser # Cerrar sesión remota por ID logoff 2 /server:SRV-EMPRESA-01

SSTP VPN integrada en WS Essentials

PowerShell — Admin
# Instalar rol de Enrutamiento y Acceso Remoto (RRAS) Install-WindowsFeature Routing -IncludeManagementTools Install-WindowsFeature DirectAccess-VPN -IncludeManagementTools # Configurar VPN (PPTP/L2TP/SSTP) desde la GUI rrasmgmt.msc # Ver conexiones VPN activas Get-RemoteAccessConnectionStatistics # Ver usuarios conectados por VPN Get-VpnS2SInterface
📧
15 · Email & Notificaciones

Integración de Email y Notificaciones SMTP

Configurar el servidor para enviar alertas y notificaciones por correo electrónico.

Intermedio
WS 2019 EssentialsPowerShell
ℹ️
WS 2019 Essentials no incluye Exchange Server. Para email corporativo usa Microsoft 365 (recomendado para PYME) o instala un servidor de terceros como hMailServer. Esta sección cubre el envío de alertas del propio servidor.

Enviar alertas por SMTP desde PowerShell

PowerShell
# Configurar credenciales SMTP (Gmail como relay) $smtpServer = "smtp.gmail.com" $smtpPort = 587 $smtpUser = "alertas@tuempresa.com" $smtpPass = "contraseña_app" # Usa "contraseña de aplicación" de Google $credencial = New-Object PSCredential($smtpUser, (ConvertTo-SecureString $smtpPass -AsPlainText -Force)) # Enviar email de prueba Send-MailMessage ` -From "alertas@tuempresa.com" ` -To "admin@tuempresa.com" ` -Subject "[SERVIDOR] Test de alertas" ` -Body "El sistema de alertas funciona correctamente." ` -SmtpServer $smtpServer ` -Port $smtpPort ` -UseSsl ` -Credential $credencial # Función reutilizable para alertas function Send-Alert ($asunto, $cuerpo) { Send-MailMessage -From "alertas@tuempresa.com" -To "admin@tuempresa.com" ` -Subject "[SRV-EMPRESA-01] $asunto" -Body $cuerpo ` -SmtpServer $smtpServer -Port $smtpPort -UseSsl -Credential $credencial } # Usar en scripts de monitoreo $disco_libre = (Get-Volume -DriveLetter C).SizeRemaining/1GB if ($disco_libre -lt 10) { Send-Alert "⚠️ Disco C casi lleno" "Solo quedan $([math]::Round($disco_libre,1)) GB libres en C:\" }
⬛ FIREWALL Y SEGURIDAD DE RED
🛡️
16 · Windows Firewall

Firewall de Windows — Reglas y Puertos

Gestión avanzada del firewall: reglas de entrada/salida, puertos de servicios y bloqueo de IPs.

Avanzado
WS 2019 EssentialsPowerShell⚠ Admin
PuertoProtocoloServicioAcción
53TCP/UDPDNSPermitir
67-68UDPDHCPPermitir
80/443TCPHTTP/HTTPSPermitir salida
135, 445TCPSMB / RPCSolo red local
389/636TCPLDAP / LDAPSPermitir
3389TCPRDPBloquear (externo)
123UDPNTPPermitir
PowerShell — Admin
# Ver estado del firewall en todos los perfiles netsh advfirewall show allprofiles # Activar firewall en todos los perfiles netsh advfirewall set allprofiles state on # Ver todas las reglas activas Get-NetFirewallRule | Where-Object {$_.Enabled -eq "True"} | Select-Object DisplayName, Direction, Action | Sort-Object Direction # Crear regla para permitir puerto específico New-NetFirewallRule ` -DisplayName "Allow SMB inbound LAN only" ` -Direction Inbound ` -Protocol TCP ` -LocalPort 445 ` -RemoteAddress "192.168.1.0/24" ` -Action Allow ` -Profile Domain,Private # Bloquear IP sospechosa New-NetFirewallRule ` -DisplayName "Block Suspicious IP" ` -Direction Inbound ` -RemoteAddress "203.0.113.100" ` -Action Block # Bloquear rango de IPs New-NetFirewallRule ` -DisplayName "Block Bad Range" ` -Direction Inbound ` -RemoteAddress "203.0.113.0/24" ` -Action Block # Eliminar regla Remove-NetFirewallRule -DisplayName "Block Suspicious IP" # Exportar configuración del firewall a archivo netsh advfirewall export "C:\Admin\firewall-backup.wfw" # Importar configuración del firewall netsh advfirewall import "C:\Admin\firewall-backup.wfw" # Abrir consola avanzada del firewall wf.msc
⬛ CHECKLIST Y MANTENIMIENTO
17 · Checklist & Mantenimiento

Checklist Completa de Mantenimiento Periódico

Tareas semanales, mensuales, trimestrales y anuales para mantener el servidor en condiciones óptimas.

📅 Semanal

  • ☐ Revisar el Visor de eventos (errores críticos)
  • ☐ Verificar espacio libre en C: y D: (>20%)
  • ☐ Confirmar que los backups completaron sin errores
  • ☐ Revisar cuentas bloqueadas en AD
  • ☐ Verificar estado de Windows Defender
  • Get-Service | Where {$_.Status -eq "Stopped"}

📆 Mensual

  • ☐ Aplicar actualizaciones de seguridad (con backup previo)
  • ☐ Ejecutar sfc /scannow y DISM /RestoreHealth
  • ☐ Revisar usuarios inactivos en AD y deshabilitar
  • ☐ Revisar grupos y permisos de carpetas compartidas
  • ☐ Limpiar logs del Visor de eventos
  • ☐ Probar una restauración desde backup (simulacro)

📊 Trimestral

  • ☐ Ejecutar dcdiag /test:all y revisar errores
  • ☐ Verificar salud de discos con SMART
  • ☐ Revisar directivas de grupo (GPO) aplicadas
  • ☐ Actualizar contraseñas de cuentas de servicio
  • ☐ Revisar reglas del Firewall (eliminar las no necesarias)
  • ☐ Optimizar discos con DISM /StartComponentCleanup

🗓️ Anual

  • ☐ Verificar validez de licencias y fecha de soporte
  • ☐ Actualizar BIOS/firmware del servidor
  • ☐ Limpieza física del hardware (polvo, ventilación)
  • ☐ Revisar capacidad del hardware vs. crecimiento
  • ☐ Plan de recuperación ante desastres — test completo
  • ☐ Revisar documentación y manual del servidor

Comandos de mantenimiento en lote

PowerShell — Admin (mantenimiento-mensual.ps1)
# Script de mantenimiento mensual completo Write-Host "=== MANTENIMIENTO MENSUAL $(Get-Date -f 'dd/MM/yyyy') ===" -ForegroundColor Cyan # 1. Verificar integridad del sistema Write-Host "`n[1/6] Verificando archivos del sistema..." sfc /scannow # 2. Reparar imagen Windows Write-Host "`n[2/6] Reparando imagen de Windows..." DISM /Online /Cleanup-Image /RestoreHealth # 3. Limpiar archivos temporales Write-Host "`n[3/6] Limpiando archivos temporales..." Remove-Item "$env:TEMP\*" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item "C:\Windows\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue # 4. Limpiar caché WU Write-Host "`n[4/6] Limpiando caché Windows Update..." Stop-Service wuauserv -Force Remove-Item "C:\Windows\SoftwareDistribution\Download\*" -Recurse -Force -ErrorAction SilentlyContinue Start-Service wuauserv # 5. Optimizar discos Write-Host "`n[5/6] Optimizando discos..." Get-Volume | Where-Object {$_.DriveLetter} | Optimize-Volume -Verbose # 6. Resumen final Write-Host "`n[6/6] Resumen del sistema:" $os = Get-WmiObject Win32_OperatingSystem Write-Host "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 Write-Host "=== MANTENIMIENTO COMPLETADO ===" -ForegroundColor Green
Documentación: Mantén siempre actualizado un documento con: IP del servidor, nombre del dominio, contraseñas de administrador (cifradas), licencias, nombres de usuarios clave, contactos del proveedor de hardware y el plan de recuperación ante desastres. Guárdalo de forma segura y offline.

Comandos de emergencia — Recuperación

CMD — WinRE / Admin
:: Reconstruir BCD si el servidor no arranca bootrec /fixmbr bootrec /fixboot bootrec /scanos bootrec /rebuildbcd :: Restaurar sistema desde backup de estado del sistema wbadmin start systemstaterecovery -version:03/15/2026-23:00 -quiet :: Restaurar Active Directory en modo DSRM (Directory Services Restore Mode) :: Arrancar en modo DSRM: En BCDEDIT o F8 durante arranque bcdedit /set safeboot dsrepair :: Después de restaurar AD: bcdedit /deletevalue safeboot :: Transferir roles FSMO a otro DC (si el primario falla) ntdsutil :: roles → connections → connect to server NUEVO-DC → quit :: seize PDC → seize RID master → seize infrastructure master → quit :: Ver roles FSMO actuales netdom query fsmo
Instalación y Mantenimiento de Computadoras · info@gps-971.com · Desde 2007
© 2007–2026 GPS-971.com · Todos los derechos reservados · Guía Windows Server 2019 Essentials
Publicado en IT

Deja una respuesta

GPS-971.com. Todos los derechos reservados. Desarrollado por www.gps-971.com

GPS-971.com. Todos los derechos reservados. Desarrollado por www.gps-971.com