/
/

Como usar scripts de logon para restringir o horário de login por departamento

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

Resumo instantâneo

Esta postagem do blog NinjaOne oferece uma lista abrangente de comandos CMD básicos e um mergulho profundo nos comandos do Windows, com +70 comandos CMD essenciais para usuários iniciantes e avançados. Explicamos sobre comandos práticos de prompt de comando para gerenciamento de arquivos, navegação em diretórios, solução de problemas de rede, operações de disco e automação, tudo com exemplos reais para maximizar a produtividade. Seja para aprender comandos básicos CMD ou dominar ferramentas avançadas de CLI do Windows, este guia ajuda você a usar o prompt de comando com mais eficiência.

Restringir o horário de login dos usuários reduz a superfície de ataque fora do expediente e ajuda a manter a conformidade com as políticas de acesso a dados. Embora o Active Directory (AD) traga restrições de horário nativas, os scripts oferecem mais flexibilidade. Neste artigo, você aprende a usar scripts de logon para aplicar restrições de horário de login por departamento.

Como usar scripts de logon para restringir o horário de login por departamento

Aplicar restrições de horário de login envolve quatro etapas: definir o departamento e a janela de login permitida, criar o script, implantá-lo por Política de Grupo e registrar o status da aplicação no Registro. Como alternativa, dá para definir os horários de login pelo CMD quando se usa o AD.

📌 Pré-requisitos:

  • Sistemas Windows 10/11 ingressados no domínio ou em grupo de trabalho
  • Editor de Política de Grupo (ou GPO local)
  • PowerShell 5.1+ ou acesso a scripts no CMD
  • Permissões de administrador para aplicar scripts de login via GPO ou RMM

📌 Estratégias de implantação recomendadas:

Clique para escolher um método💻
Melhor para usuários individuais
💻💻💻
Melhor para empresas
Etapa 1: defina o departamento e a janela de login permitida✓
Etapa 2: crie a lógica do script de logon✓
Etapa 3: implante o script de logon com a Política de Grupo✓
Etapa 4: registre o status da aplicação no Registro✓
Método alternativo: CMD e alternativas com net user✓

Etapa 1: defina o departamento e a janela de login permitida

O primeiro passo para restringir horários de login é definir as janelas de login de cada departamento.

📌 Caso de uso: administrador de TI que precisa de uma forma direta de mapear os atributos de departamento do AD para horários de login específicos, sem criar regras usuário por usuário

  1. Pressione Win, digite PowerShell e clique em Executar como administrador.
  2. Copie e cole o código a seguir no prompt e pressione Enter:

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

Para detectar o departamento do usuário por um atributo do AD, copie e cole este script:

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

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

Etapa 2: crie a lógica do script de logon

Com as janelas de login definidas, o próximo passo é criar a lógica do script de login.

📌 Caso de uso: administradores que querem um script de restrição imediato e personalizável para aplicar os horários de login

  1. Pressione Win, digite PowerShell e clique em Executar como administrador.
  2. Copie e cole o código a seguir no prompt e pressione Enter:
# 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
}

⚠️ Aviso: antes de aplicar a mudança em vários endpoints, teste em uma máquina local. (Saiba mais em: Pontos de atenção)

Etapa 3: implante o script de logon com a Política de Grupo

O próximo passo é implantar o script de logon pela Política de Grupo.

📌 Caso de uso: administrador de TI que gerencia vários endpoints e prefere uma abordagem centralizada e escalável para aplicar restrições de login a todos os usuários

  1. Pressione Win + R, digite gpmc.msc e pressione Enter.
  2. Vá até:

Configuração do Usuário > Configurações do Windows > Scripts (Logon/Logoff)

  1. Em seguida, adicione o script do PowerShell.
  2. Garanta que a Política de Execução esteja definida como RemoteSigned, acessando:

Configuração do Computador > Modelos Administrativos > Componentes do Windows > Windows PowerShell > Ativar Execução de Script

  1. Defina como: Permitir scripts locais e scripts remotos assinados.

Etapa 4: registre o status da aplicação no Registro

Com a política aplicada, é possível registrar localmente as ações de aplicação com um script do PowerShell.

📌 Caso de uso: administradores de TI que querem criar uma trilha de auditoria local mostrando quando as restrições de login foram aplicadas

  1. Pressione Win, digite PowerShell e clique em Executar como administrador.
  2. Copie e cole o código a seguir no prompt e pressione Enter:

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"

Depois, use o CMD para verificar o conteúdo da sua chave de registro personalizada.

  1. Pressione Win, digite cmd e clique em Executar como administrador.
  2. Copie e cole o código a seguir no prompt e pressione Enter:

reg query HKLM\SOFTWARE\Org\LogonRestrictions

⚠️ Aviso: copie e cole o script correto, já que uma sintaxe errada pode causar erros. (Saiba mais em: Pontos de atenção)

Método alternativo: CMD e alternativas com net user

Esta é outra forma de definir horários de login quando se usa o Active Directory.

📌 Caso de uso: administradores que querem um recurso nativo para restringir horários de login sem implantar scripts

  1. Pressione Win, digite cmd e clique em Executar como administrador.
  2. Copie e cole o código a seguir no prompt e pressione Enter:

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

💡 Dica: essa configuração é aplicada diretamente no nível do controlador de domínio.

⚠️ Observação: o método tem limitações. Ele não oferece aplicação por interface gráfica, nem personalização por departamento, a menos que você separe o direcionamento por OU (Unidade Organizacional).

⚠️ Pontos de atenção

RiscosPossíveis consequênciasReversões
Não testar em uma máquina localImplantar um script sem teste pode fazer os dispositivos travarem por problemas como incompatibilidade de chaves de registro.Aplique as mudanças em uma máquina local e verifique se a configuração gera o resultado esperado.
Sintaxe de comando incorretaUma sintaxe errada pode corromper o registro, causar comportamento anormal do sistema ou simplesmente não surtir efeito.Copie e cole o script correto no prompt. Você também pode usar ferramentas como o PSScriptAnalyzer para avaliar a qualidade do código.

Considerações adicionais

Alguns cenários de usuário exigem tratamento especial para evitar bloqueios acidentais ou interrupções. Veja a seguir as exceções mais comuns a considerar ao aplicar restrições de login.

Contas de emergência (break-glass)

Contas break-glass são contas administrativas de emergência, usadas quando o provedor de identidade principal está fora do ar. Sempre inclua uma exceção para elas executando este script do PowerShell:

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

Vários fusos horários

Usuários em fusos diferentes não compartilham o mesmo horário comercial. Se o $allowedTimes considerar UTC+8 mas a equipe nos EUA fizer login às 9h no horário local, o acesso pode ser negado. Para resolver, converta todas as verificações para UTC e associe cada usuário ao seu fuso.

Contas de serviço

Contas de serviço não pertencem a pessoas: são usadas por aplicativos ou quiosques. Elas precisam de acesso 24 horas por dia, 7 dias por semana, e bloqueá-las pode quebrar automações. Para evitar isso, coloque-as em um grupo dedicado do AD e crie uma lógica que ignore as restrições.

Usuários de notebook

Funcionários em viagem internacional podem fazer login fora do horário habitual do escritório e acabar com o acesso negado. Nesse caso, o ideal é usar grupos do AD para exceções ou incluir um sinalizador no script que suspenda temporariamente as restrições para usuários específicos.

Solução de problemas comuns

Ao usar scripts de logon para restringir horários de login, podem surgir problemas que afetam a confiabilidade e a experiência do usuário. Veja a seguir os mais frequentes e como resolvê-los.

O script não é executado

Alguns scripts não rodam no logon ou no logoff, geralmente por problemas de acesso ou por políticas de execução restritivas do PowerShell. Para resolver, execute Get-ExecutionPolicy e atualize com Set-ExecutionPolicy RemoteSigned.

Detecção incorreta de departamento

Se os dados do AD estiverem inconsistentes, os scripts podem classificar usuários de forma errada. Por isso, verifique os valores dos atributos no PowerShell e confirme se os campos de departamento estão preenchidos executando Get-ADUser -Identity username -Property Department.

O logoff não é aplicado

Alguns usuários continuam conectados mesmo quando a restrição funciona no logon, o que driblam as políticas por horário. Nesses casos, atribua scripts de logoff pela Política de Grupo para encerrar a sessão. Também dá para configurar uma tarefa agendada que dispare em horários fixos e execute o logoff.

Reinicialização forçada do usuário

Alguns administradores usam Stop-Computer para encerrar a sessão. Funciona, mas o script pode causar perda de dados por conta do desligamento ou reinício forçado.

Uma alternativa é usar o logoff.exe. Esse comando desconecta o usuário sem reiniciar o dispositivo, o que gera menos interrupção.

Serviços NinjaOne que aprimoram o gerenciamento de restrições de horário de login

Com NinjaOne, MSPs (provedores de serviços gerenciados) aplicam e monitoram regras de acesso por horário em todos os clientes, sem depender de licenças do AD ou do Azure.

NinjaOne aprimora o gerenciamento de restrições de horário de login ao:

  • implantar scripts de restrição de logon remotamente em todos os tenants
  • varrer chaves de registro para confirmar a aplicação da política por dispositivo
  • alertar sobre tentativas de login fora das janelas permitidas por evento ou saída de script
  • marcar endpoints ou usuários que violam os limites de login
  • automatizar processos de reversão ou exceção para acessos específicos de cada departamento

Defina limites de login com scripts de logon

Controlar os horários de login por departamento ajuda a aplicar as políticas de trabalho, reforçar a segurança e manter a conformidade. Implementar essas restrições com scripts de logon também reduz a superfície de ataque fora do expediente e apoia a conformidade com as políticas de acesso a dados.

Temas relacionados:

Guia de início rápido

Os recursos flexíveis de scripts e gerenciamento de políticas do NinjaOne indicam que você poderia:

  • criar um script personalizado para aplicar restrições de login por horário
  • usar automações agendadas para controlar o acesso de login
  • aproveitar condições de política para gerenciar comportamentos de login

Recomendados para você

Pronto para simplificar as partes mais difíceis da TI?