Espero que em algum lugar do Active Directory o "último logon do [computador]" seja gravado/armazenado ou haja um log que eu possa analisar?
O objetivo de saber o último PC conectado é oferecer suporte remoto pela rede - nossos usuários se movimentam com pouca frequência, mas eu gostaria de saber que o que eu estou consultando estava atualizando naquela manhã (quando eles se conectaram , presumivelmente) no mínimo.
Também estou considerando scripts de login que gravam os nomes de usuário e computador em um local conhecido que eu possa referenciar, mas alguns de nossos usuários não gostam de sair por 15 dias de cada vez.
Se houver uma solução elegante que use scripts de login, mencione-a definitivamente - mas se funcionar apenas para desbloquear a estação, seria ainda melhor!
Como parte de nosso script de logon, tenho essas informações (e mais) registradas em um compartilhamento oculto em um servidor, com um arquivo de log por usuário. Um script de logoff adiciona a hora em que o usuário fez logoff no mesmo arquivo de log. Fácil de configurar, sem custo e as informações estão em um formato de fácil leitura.
Fazemos isso via script de logon que atualiza a descrição do objeto de computador no AD.
Você precisa executar uma delegação de controle personalizada para permitir que "Usuários autenticados" gravem a propriedade de descrição de objetos de computador no(s) domínio(s).
Feito isso, tudo o que você precisa é de um script que gere qualquer informação desejada e grave as propriedades no objeto de computador. Esse script é então atribuído como um script de logon por meio de um objeto de Diretiva de Grupo vinculado ao domínio.
Colocamos um carimbo de data/hora, nome de usuário, IP(s) no campo de descrição. O carimbo de data/hora vem primeiro porque facilita a visualização rápida de objetos de computador "antigos" classificando no campo de descrição.
Aqui está o script que escrevi para isso, se você quiser usá-lo como ponto de partida:
Eu tive que alcançar o mesmo resultado por razões semelhantes; de alguma forma determinar de qual máquina um usuário específico efetuou login. Eu queria saber "antes do fato" e não podia alterar os scripts de login do usuário conforme discutido acima.
Usei o powershell no DC no qual o usuário estava se autenticando para analisar o log de eventos de segurança:
get-eventlog "Security" | where {$_.Message -like "*Username*" -AND "Source Network Address"} | export-csv C:\Temp\test.csv
Abra o .csv com o Excel ou seu editor favorito e procure a entrada mais recente que mostra o Nome da Conta (Nome de Usuário) e o Endereço de Rede de Origem no mesmo evento.
Isso pode não ser uma solução 100% confiável (dependendo dos tempos de concessão do DHCP, etc.), mas funcionou para mim.
Você pode habilitar a auditoria para eventos de logon de conta. Esses eventos (incluindo o desbloqueio da estação de trabalho) serão armazenados no log de segurança do DC.
Também existem ferramentas de terceiros que podem facilitar isso, como True Last Logon .
Eu apenas escrevo o nome do usuário (assim como outras informações, como data e hora, algumas versões do programa e assim por diante) na descrição do computador usando um script de logon. Dessa forma, posso obter todas as informações de usuários e computadores do AD de maneira rápida e fácil e, como bônus, tenho uma boa maneira de identificar quais PCs ainda no AD não são usados há algum tempo (e, portanto, provavelmente são máquinas mortas).
ThatGraemeGuy , obrigado pelo excelente roteiro! Eu tive que reescrevê-lo no PowerShell, mas ainda funciona.
O truque para saber com certeza onde os usuários fizeram login pela última vez, além das sugestões de Adam, é a agregação de logs. Se você tiver vários controladores de domínio, verifique todos eles ou centralize seu registro e verifique o registro único.
Algumas, talvez até a maioria, ferramentas de terceiros são inteligentes o suficiente para consultar todos os controladores de domínio. Mas se você está pensando em escrever um script para analisá-lo sozinho, não posso argumentar com força suficiente para a centralização de seus logs.
Idealmente, você capturaria o seguinte para sua equipe CSIRT ajudar nas investigações.
ID do usuário fazendo login com o nome da estação de trabalho Endereço MAC Endereço IP Data/carimbo de data e hora Tipo de login (rdp, interfactive etc)
Em seguida, despeje isso em um comando sql em um banco de dados que eles possam consultar. Bits e pedaços são registrados em todo o lugar, mas gravar isso economiza tempo puxando os dados de servidores DHCP/WINS etc...
Eu ia adicionar isso como um comentário à resposta de marcusjv acima, mas não tenho a reputação, então uma resposta separada terá que servir:
Nessa expressão -AND "endereço de rede de origem" sempre será avaliado como TRUE
Acho que o que você precisa é: get-eventlog "Segurança" | onde {$ .Message -like "*username*" -AND $ .Message.contains("Source Network Address")}
A única maneira de obter as informações mais recentes é através da coleta de logs. Use uma ferramenta como o Microsoft Operations Manager ou uma ferramenta gratuita como o snare para agregar logs de eventos interessantes do servidor em um local central (arquivos de texto normais ou banco de dados SQL) e, em seguida, use ferramentas como logparser ou consultas SQL para gerar o relatório desejado.
para encontrar diferentes IDs de eventos para diferentes eventos, acesse a Enciclopédia do Log de Eventos
Deixe-me saber, se você quiser seguir esse caminho, posso ajudá-lo a criar as consultas apropriadas para o logparser.