🛡️ Controla los horarios de inicio de sesión en Active Directory con PowerShell

🎯 Introducción

¿Necesitas restringir cuándo pueden iniciar sesión los usuarios en tu dominio? Este script en PowerShell completamente interactivo te permite configurar horarios de acceso a través de logonHours para usuarios en Active Directory (AD), seleccionando unidades organizativas (OU) específicas y definiendo franjas horarias con facilidad.

Ideal para administradores de sistemas que buscan una herramienta simple, potente y adaptable a entornos reales.


⚙️ Características destacadas

  • 📁 Selección de OUs directamente desde Active Directory
  • 👤 Aplica restricciones a un usuario o a todos los usuarios de una OU
  • 🕒 Soporte completo para formato de 24 horas y 12 horas (AM/PM)
  • 🧭 Menú interactivo para:
    • Añadir y eliminar franjas horarias
    • Previsualizar las configuraciones antes de aplicar
  • 💡 Compatibilidad con rangos de días (M-F, Sa-Su, F-M)
  • 🛑 Advertencias claras si se introducen minutos (AD solo admite horas enteras)
  • 🇬🇧 Totalmente en inglés, pero funcional en entornos AD en español

🧠 ¿Cómo funciona?

Active Directory representa los horarios de inicio de sesión como un array de 21 bytes (168 bits), con 7 días * 24 horas. Cada bit representa una hora en la semana:

  • 1 significa permite acceso
  • 0 significa bloquea acceso
  • El domingo es el día 0 y el sábado el día 6
  • La hora final es exclusiva (por ejemplo, hasta las 21:00 significa hasta las 20:59)

🖥️ Requisitos previos

  • Windows Server con Active Directory
  • PowerShell con privilegios de Administrador
  • Módulo ActiveDirectory instalado (disponible en controladores de dominio)

🚀 Cómo usar el script

  1. Descarga el script desde GitHub:
    https://github.com/joseluisinigo/Set-LogonHours-Interactive

  2. Ejecuta PowerShell como Administrador.

  3. Lanza el script:

    .\Set-LogonHours-Interactive.ps1
  4. Sigue los pasos interactivos:

    • Selecciona una OU
    • Elige un usuario o todos
    • Define franjas de días y horas (ej: M-F, 4PM9PM)
    • Confirma y aplica la configuración

⏱️ Formatos de hora permitidos

Entrada Formato Resultado
16 24 horas Permitido
16:00 24 horas Minutos ignorados
4PM 12h AM/PM Convertido a 16
4:30PM 12h AM/PM ⚠ Se usará como 16:00

🧪 Ejemplo real

Available Organizational Units:
0. OU=Teachers,...
1. OU=Alumnos_BDD,...

Select OU number: 1

Select user:
0. Ana Mena Perez
1. Miguel Vazquez Bermejo
2. Apply to all users

Enter days (e.g., M-F or Sa): M-F
Enter start time (e.g., 4PM): 4PM
Enter end time (e.g., 9PM): 9PM
✓ Added range: M-F from 16:00 to 21:00

Save and apply? y
✅ LogonHours applied to Ana Mena Perez

🧑‍💻 Autor

Jose Luis Iñigo
Alias: Riskoo
🌐 https://joseluisinigo.work
📬 info@joseluisinigo.work
🐙 github.com/joseluisinigo


📝 Licencia

MIT License — puedes usarlo libremente incluso en entornos comerciales.


📦 Historial de versiones

v1.0.0

  • Selección básica de OU y usuarios

v1.1.0

  • Soporte para múltiples franjas horarias

v1.2.0

  • Compatibilidad completa con mapeo Domingo = 0
  • Soporte para AM/PM y validaciones horarias

v1.3.0

  • Vista previa de rangos y eliminación segura
  • Mejoras de validación

v1.4.0 (actual)

  • Documentación completa y mejoras visuales
  • Verificado frente a políticas reales de AD

🧭 Próximas mejoras

  • Exportación/importación de configuraciones
  • Integración con GPO
  • Versión GUI (gráfica)

🐛 ¿Encontraste un error?

Crea un issue o contacta al autor directamente:
👉 https://github.com/joseluisinigo/Set-LogonHours-Interactive


¿Te ha sido útil este script? Dale una ⭐ en GitHub o compártelo con otros administradores de sistemas. ¡Gracias por apoyar software libre y funcional!