🛡️ 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 acceso0
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
-
Descarga el script desde GitHub:
https://github.com/joseluisinigo/Set-LogonHours-Interactive -
Ejecuta PowerShell como Administrador.
-
Lanza el script:
.\Set-LogonHours-Interactive.ps1
-
Sigue los pasos interactivos:
- Selecciona una OU
- Elige un usuario o todos
- Define franjas de días y horas (ej:
M-F
,4PM
–9PM
) - 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!