Recentemente me deparei com a necessidade de ajustar dinamicamente o atributo logonHours dos usuários do AD. Alguns poderiam logar a qualquer momento e outro apenas entre às 8h e 18h, além disso, ocasionalmente precisaríamos incluir os usuários que estariam liberados para fazer HE.
Daí surgiu a ideia de criar esse script em Powershell onde é possível definir o atributo de logonHours trabalhando apenas com uma lista de liberações default e outra diária.
Obs.: Executo esse script diariamente, antes do início do expediente.
Start-Transcript -path “D:\ScriptsAD\Logs\set_logoff_default.log”
############### Atualiza a lista temporária com os dados da lista default ###############
$logoffdiario = Get-Content “D:\ScriptsAD\LogoffDiario\usuarios_liberados.txt”
foreach($diario in $logoffdiario)
{
### Horário das 8:00 às 18:00 (utilizar o ADSI para obter o valor em decimal)
$logonHours = @{“logonHours” = [byte[]]$hours=@(000,000,000,000,252,063,000,252,063,000,252,063,000,252,063,000,252,063,000,000,000)}Set-ADUser $diario -Replace $logonHours
}
Copy-Item “D:\ScriptsAD\LogoffDefault\usuarios_liberados.txt” -Destination “D:\ScriptsAD\LogoffDiario\usuarios_liberados.txt”
$logoffdefault = Get-Content “D:\ScriptsAD\LogoffDiario\usuarios_liberados.txt”
foreach($default in $logoffdefault)
{
### Sem restrição de horário
$logonHours = @{“logonHours” = [byte[]]$hours=@(255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255)}Set-ADUser $default -Replace $logonHours
}
Stop-Transcript
Espero que tenham gostado da ideia, depois postarei outro script onde incluo também o logoff forçado das estações para garantir que mesmo o usuário já estando logado as definições do atributo logonHours sejam respeitadas.