/
/

Cómo usar scripts de inicio de sesión para aplicar restricciones de horario por departamento

por Team Ninja
How to Use Logon Scripts to Enforce Login Time Restrictions Across Departments blog banner image

Resumen instantáneo

Este post ofrece una lista completa de comandos CMD básicos y una inmersión profunda en los comandos de Windows, con más de 70 comandos cmd esenciales tanto para principiantes como para usuarios avanzados. Explica comandos prácticos del símbolo del sistema para la gestión de archivos, la navegación por directorios, la solución de problemas de red, las operaciones de disco y la automatización con ejemplos reales para mejorar la productividad. Tanto si estás aprendiendo los comandos básicos de cmd como si ya dominas las herramientas avanzadas de la CLI de Windows, esta guía te ayudará a utilizar el Símbolo del sistema de forma más eficaz.

Aplicar restricciones de inicio de sesión a los usuarios reduce la superficie de ataque fuera del horario laboral y ayuda a cumplir las políticas de acceso a los datos. Aunque Active Directory (AD) incluye restricciones horarias de inicio de sesión de forma nativa, los scripts te dan mucha más flexibilidad. En este artículo aprenderás a usar scripts de inicio de sesión para aplicar restricciones de horario por departamento.

Cómo usar scripts de inicio de sesión para aplicar restricciones de horario en cada departamento

Aplicar restricciones de horario de inicio de sesión consta de cuatro partes: definir el departamento y la franja horaria permitida, crear el script, desplegarlo mediante directiva de grupo y registrar el estado de aplicación en el Registro. También puedes configurar los horarios de inicio de sesión desde CMD si trabajas con AD.

📌 Requisitos previos:

  • Sistemas Windows 10/11 unidos a un dominio o en grupo de trabajo
  • Editor de directivas de grupo (o GPO local)
  • PowerShell 5.1+ o acceso a scripts de CMD
  • Permisos de administrador para aplicar scripts de inicio de sesión mediante GPO o RMM

📌 Estrategias de despliegue recomendadas:

Haz clic para elegir un método💻
Ideal para usuarios individuales
💻💻💻
Ideal para empresas
Paso 1: define el departamento y la franja horaria permitida✓
Paso 2: crea la lógica del script de inicio de sesión✓
Paso 3: despliega el script con directiva de grupo✓
Paso 4: registra el estado de aplicación en el Registro✓
Método alternativo: CMD y alternativas con net user✓

Paso 1: define el departamento y la franja horaria permitida

El primer paso para aplicar restricciones de horario de inicio de sesión es definir las franjas horarias de cada departamento.

📌 Caso de uso: un administrador de TI que necesita una forma directa de asociar los atributos de departamento de AD con horarios de inicio de sesión concretos, sin configurar reglas usuario por usuario

  1. Pulsa Win, escribe PowerShell y haz clic en Ejecutar como administrador.
  2. Copia y pega el siguiente código en la consola y pulsa Intro:

$allowedTimes = @{
«Sales» = @{Start = 8; End = 18}
«Finance» = @{Start = 7; End = 17}
«IT» = @{Start = 0; End = 23}
«Default» = @{Start = 9; End = 17}
}

Para detectar el departamento del usuario mediante un atributo de AD, copia y pega este script en su lugar:

$user = [System.Security.Principal.WindowsIdentity]::GetCurrent()

$department = (Get-ADUser $user.Name -Properties Department).Department

Paso 2: crea la lógica del script de inicio de sesión

Una vez definidas las franjas horarias, el siguiente paso es crear la lógica del script de inicio de sesión.

📌 Caso de uso: administradores que quieren un script de restricción inmediato y personalizable que aplique los horarios de inicio de sesión

  1. Pulsa Win, escribe PowerShell y haz clic en Ejecutar como administrador.
  2. Copia y pega el siguiente código en la consola y pulsa Intro:
# Current hour
$now = (Get-Date).Hour# Department (fallback to Default if missing)
$dept = if ($department) { $department } else { "Default" }
if (-not $allowedTimes.ContainsKey($dept)) { $dept = «Default» }# Allowed time window
$start = $allowedTimes[$dept].Start
$end = $allowedTimes[$dept].End# Check access
if ($now -lt $start -or $now -ge $end) {
Add-Type -AssemblyName PresentationFramework $startTime = «{0:D2}:00» -f $start
$endTime = «{0:D2}:00» -f $end [System.Windows.MessageBox]::Show(
«Login not allowed at this time.`nYou may log in between $startTime and $endTime.»,
«Access Restricted»,
‘OK’,’Error’
) # Safer alternative: log off instead of hard shutdown
Start-Process "shutdown.exe" -ArgumentList "/l" -NoNewWindow
}

⚠️ Advertencia: antes de aplicar el cambio de configuración en varios endpoints, lo mejor es probarlo en un equipo local. (Más información en: Aspectos a tener en cuenta)

Paso 3: despliega el script con directiva de grupo

El siguiente paso es desplegar el script de inicio de sesión mediante directiva de grupo.

📌 Caso de uso: un administrador de TI que gestiona varios endpoints y prefiere un enfoque centralizado y escalable para aplicar restricciones de inicio de sesión a todos los usuarios

  1. Pulsa Win + R, escribe gpmc.msc y pulsa Intro.
  2. Ve a la siguiente ruta:

Configuración de usuario > Configuración de Windows > Scripts (inicio de sesión/cierre de sesión)

  1. A continuación, añade el script de PowerShell.
  2. Comprueba que la directiva de ejecución esté configurada como RemoteSigned en la siguiente ruta:

Configuración del equipo > Plantillas administrativas > Componentes de Windows > Windows PowerShell > Activar la ejecución de scripts

  1. Configúralo como: permitir scripts locales y scripts remotos firmados.

Paso 4: registra el estado de aplicación en el Registro

Una vez aplicada la política, puedes registrar las acciones de aplicación en local con un script de PowerShell.

📌 Caso de uso: administradores de TI que quieren crear un registro de auditoría local que muestre cuándo se aplicaron las restricciones de inicio de sesión

  1. Pulsa Win, escribe PowerShell y haz clic en Ejecutar como administrador.
  2. Copia y pega el siguiente código en la consola y pulsa Intro:

New-Item -Path "HKLM:\SOFTWARE\Org\LogonRestrictions" -Force

Set-ItemProperty -Path "HKLM:\SOFTWARE\Org\LogonRestrictions" -Name "LastEnforced" -Value (Get-Date).ToString(«u»)

Set-ItemProperty -Path "HKLM:\SOFTWARE\Org\LogonRestrictions" -Name "Status" -Value "Login blocked due to after-hours access"

Después puedes usar CMD para comprobar el contenido de tu clave de registro personalizada.

  1. Pulsa Win, escribe cmd y haz clic en Ejecutar como administrador.
  2. Copia y pega el siguiente código en la consola y pulsa Intro:

reg query HKLM\SOFTWARE\Org\LogonRestrictions

⚠️ Advertencia: asegúrate de copiar y pegar el script correcto, ya que una sintaxis incorrecta puede provocar errores. (Más información en: Aspectos a tener en cuenta)

Método alternativo: CMD y alternativas con net user

Esta es otra forma de configurar los horarios de inicio de sesión si utilizas Active Directory.

📌 Caso de uso: administradores que buscan una opción nativa para restringir los horarios de inicio de sesión sin desplegar scripts

  1. Pulsa Win, escribe cmd y haz clic en Ejecutar como administrador.
  2. Copia y pega el siguiente código en la consola y pulsa Intro:

net user username /times:M-F,8am-6pm;Sa-Su,0am-0am

💡 Consejo: esta configuración se aplica directamente a nivel del controlador de dominio.

⚠️ Nota: este método tiene limitaciones. Por ejemplo, no ofrece aplicación desde una interfaz gráfica ni permite personalizar por departamento, a menos que separes el ámbito por OU (unidad organizativa).

⚠️ Aspectos a tener en cuenta

RiesgosPosibles consecuenciasCómo revertirlo
No probarlo en un equipo localDesplegar un script sin probar puede provocar fallos en los dispositivos por problemas como la incompatibilidad de claves de registro.Aplica los cambios que quieras en un equipo local y comprueba después si la configuración produce el resultado esperado.
Sintaxis de comandos incorrectaUna sintaxis incorrecta puede corromper el registro, provocar un comportamiento anómalo del sistema o que el código no haga nada.Asegúrate de copiar y pegar el script correcto en la consola. También puedes usar herramientas como PSScriptAnalyzer para revisar la calidad del código.

Otras consideraciones

Algunos escenarios de usuario requieren un tratamiento especial para evitar bloqueos accidentales o interrupciones. Estas son las excepciones más habituales que deberías tener en cuenta al aplicar restricciones de inicio de sesión.

Cuentas de emergencia (break-glass)

Las cuentas break-glass son cuentas de administrador de emergencia que se usan cuando el proveedor de identidad principal no está disponible. Añade siempre una exención para estas cuentas ejecutando el siguiente script de PowerShell:

if ($user -in $breakGlassAccounts) { return «Bypass restrictions» }

Varias zonas horarias

Los usuarios que trabajan en zonas horarias distintas no comparten el mismo horario laboral. Si tu $allowedTimes da por hecho UTC+8 pero tu personal en EE. UU. inicia sesión a las 9 de la mañana en su hora local, podrían quedarse fuera. Para evitarlo, convierte todas las comprobaciones a UTC y asocia cada usuario a su zona horaria.

Cuentas de servicio

Las cuentas de servicio son cuentas no humanas que utilizan aplicaciones o kioscos. Necesitan acceso 24/7 y bloquearlas puede romper automatizaciones. Para gestionarlo, puedes incluirlas en un grupo de AD específico y añadir lógica que omita las restricciones.

Usuarios con portátil

Los empleados que viajan al extranjero pueden iniciar sesión fuera de su horario habitual de oficina y quedarse sin acceso. En este caso, lo ideal es usar grupos de AD para las excepciones o añadir una marca en el script que levante temporalmente las restricciones a usuarios concretos.

Solución de problemas habituales

Al usar scripts de inicio de sesión para aplicar restricciones puedes encontrarte con problemas que afectan a la fiabilidad y a la experiencia del usuario. Estos son algunos de los más frecuentes y cómo resolverlos.

El script no se ejecuta

Hay scripts que no se ejecutan al iniciar o cerrar sesión, normalmente por problemas de accesibilidad o por directivas de ejecución de PowerShell demasiado restrictivas. Para resolverlo, ejecuta Get-ExecutionPolicy y actualízala con Set-ExecutionPolicy RemoteSigned.

Detección incorrecta del departamento

Los scripts pueden clasificar mal a los usuarios si los datos de AD son inconsistentes. Por eso debes revisar los valores de los atributos con PowerShell para confirmar que los campos de departamento están rellenados, ejecutando Get-ADUser -Identity username -Property Department.

El cierre de sesión no se aplica

Algunos usuarios siguen con la sesión abierta aunque las restricciones funcionen en el inicio de sesión, con lo que esquivan las políticas basadas en horarios. Si ocurre esto, asigna scripts de cierre de sesión mediante directiva de grupo para forzar el fin de la sesión. También puedes configurar una tarea programada que se active a horas fijas para ejecutar los cierres de sesión.

Reinicio forzado del usuario

Algunos administradores utilizan Stop-Computer para forzar el fin de la sesión. Es eficaz, pero el script puede provocar la pérdida de datos del usuario por el apagado o reinicio forzado.

Una alternativa es usar logoff.exe. Este comando cierra la sesión del usuario sin reiniciar el dispositivo, así que resulta menos disruptivo.

Servicios de NinjaOne que mejoran la gestión de las restricciones de horario de inicio de sesión

Los MSP (proveedores de servicios gestionados) pueden aplicar reglas de acceso basadas en horarios e informar sobre ellas en todos sus clientes con NinjaOne, sin depender de AD ni de licencias de Azure.

NinjaOne mejora la gestión de las restricciones de horario de inicio de sesión al:

  • Desplegar scripts de restricción de inicio de sesión en remoto en varios tenants
  • Analizar claves de registro para confirmar la aplicación de la política en cada dispositivo
  • Alertar de intentos de inicio de sesión fuera de las franjas permitidas mediante eventos o la salida de un script
  • Etiquetar endpoints o usuarios que incumplen los límites de inicio de sesión
  • Automatizar procesos de reversión o de excepción para accesos específicos por departamento

Aplica límites de inicio de sesión con scripts de logon

Controlar los horarios de inicio de sesión por departamento ayuda a hacer cumplir las políticas de trabajo, mejorar la seguridad y mantener el cumplimiento. Además, aplicar estas restricciones con scripts de inicio de sesión reduce la superficie de ataque fuera del horario laboral y facilita el cumplimiento de las políticas de acceso a los datos.

Temas relacionados:

Guía de inicio rápido

Las capacidades flexibles de scripting y de gestión de políticas de NinjaOne apuntan a que podrías:

  • Crear un script personalizado para aplicar restricciones de inicio de sesión basadas en horarios
  • Usar automatizaciones programadas para controlar el acceso al inicio de sesión
  • Aprovechar las condiciones de política para gestionar el comportamiento del inicio de sesión

Quizá también te interese…

¿Listo para simplificar los aspectos más complejos de las TI?