A melhor maneira de encontrar o computador do qual o usuário fez o último logon?

19

Espero que em algum lugar do Active Directory o "último logado do [computador]" esteja gravado / armazenado ou haja um log que eu possa analisar?

O propósito de querer saber o último PC conectado é oferecer suporte remoto através da rede - nossos usuários se movimentam muito raramente, mas eu gostaria de saber que tudo o que eu estou consultando estava atualizando naquela manhã (quando eles logaram, presumivelmente) no mínimo.

Também estou considerando scripts de login que gravam os nomes de usuário e de computador em um local conhecido que posso referenciar, mas alguns de nossos usuários não gostam de fazer logoff por 15 dias por vez.

Se houver uma solução elegante que use scripts de login, mencione isso definitivamente - mas se funcionar apenas para desbloquear a estação, seria ainda melhor!

    
por Garrett 23.07.2009 / 23:32

11 respostas

22

Como parte do nosso script de logon, eu tenho essas informações (e mais) registradas em um compartilhamento oculto em um servidor, com um arquivo de log por usuário. Um logoff scripts adiciona o tempo que o usuário efetuou logoff no mesmo arquivo de log. Fácil de configurar, sem custo e as informações estão disponíveis em um formato fácil de ler.

    
por 24.07.2009 / 00:24
10

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 dos objetos de computador no domínio / s.

Uma vez feito isso, tudo o que você precisa é um script que gere qualquer informação que você queira e escreva as propriedades no objeto do computador. Esse script é então atribuído como um script de login por meio de um objeto de Diretiva de Grupo vinculado ao domínio.

Colocamos um timestamp, nome de usuário, IP no campo de descrição. O registro de data e hora vem em primeiro lugar porque facilita a visualização rápida de objetos de computador "antigos" ao classificar no campo de descrição.

Aqui está o script que escrevi para isso, se você quiser usá-lo como ponto de partida:

On Error Resume Next

Set objSysInfo = CreateObject("ADSystemInfo") 'Bind to AD
Set objNet = CreateObject("WScript.Network")

strCompDN = objSysInfo.ComputerName 'DN for computer, e.g. "CN=VISTAWORKSTATION,OU=Child OU Name,OU=Parent OU Name,DC=domain,DC=com"
Set objComp = GetObject("LDAP://" & strCompDN) 'IADsComputer object

strUserDN = objSysInfo.UserName 'DN for user, e.g. "CN=John Smith,OU=Child OU Name,OU=Parent OU Name,DC=domain,DC=com"
Set objUser = GetObject("LDAP://" & strUserDN) 'IADsUser object

strUsrLogin = LCase(objNet.UserName)

strNow = Now
strDateStamp = DatePart("yyyy",strNow) & _
    Right("0" & DatePart("m",strNow), 2) & _
    Right("0" & DatePart("d",strNow), 2) & _
    "@" & _
    Right("0" & DatePart("h",strNow), 2) & _
    Right("0" & DatePart("n",strNow), 2)

'RegExp object used to perform a simple match on IP address
Set objRE = New RegExp
objRE.IgnoreCase = True
'Note this regexp pattern isn't "correct" for matching an IPv4 address properly, but since WMI will return an
'array of IP addresses, this is sufficient to distinguish IPv4 vs IPv6
objRE.Pattern = "^\d+\.\d+\.\d+\.\d+$"

strIP = ""

'Connect to WMI and retreive all network adapters
Set objWMI = GetObject("winmgmts:")
Set colNICs = objWMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration")

'Get the IP(s) assigned to whichever network adapter has our default gateway
If colNICs.Count > 0 Then
    For Each objNIC in colNICs
        If IsArray(objNIC.DefaultIPGateway) Then
            arrIP = objNIC.IPAddress
            For i = 0 To UBound(arrip)
                If objRE.Test(arrIP(i)) Then strIP = strIP & " " & arrIP(i)
            Next
            strMAC = objNIC.MACAddress
        End If  
    Next
End If

strIP = Trim(strIP)

objComp.Description = strDateStamp & " " & strUsrLogin & " " & strIP
objComp.Put "extensionAttribute1", strUsrLogin
objComp.Put "extensionAttribute2", strIP
objComp.Put "extensionAttribute3", strMAC

objComp.SetInfo
    
por 24.07.2009 / 13:03
6

Eu tive que obter o mesmo resultado por razões semelhantes; de alguma forma, determine 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 como discutido acima. Eu usei powershell no DC que o usuário estava 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 arquivo .csv com o excel ou seu editor fav e procure pela entrada mais recente que mostra o nome da conta (nome do usuário) e o endereço da 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.

    
por 01.03.2012 / 01:38
6

Você pode ativar a auditoria para eventos de logon da conta. Esses eventos (incluindo o desbloqueio da estação de trabalho) serão armazenados no log de segurança do DC .

Há também ferramentas de terceiros que facilitam isso, como True Last Logon .

    
por 23.07.2009 / 23:49
4

Acabei de escrever o nome de 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 dos usuários do AD & Computadores de forma rápida e fácil, e como bônus, temos uma boa maneira de identificar quais PCs ainda em AD não foram usados por um tempo (e, portanto, são provavelmente máquinas mortas).

    
por 24.07.2009 / 11:06
3

ThatGraemeGuy , obrigado pelo excelente roteiro! Eu tive que reescrevê-lo no PowerShell, mas ainda funciona.

$CompDN = "(&(objectCategory=computer)(objectClass=computer)(cn=$env:COMPUTERNAME))"
$strCompDN = [string]([adsisearcher]$CompDN).FindOne().Properties.distinguishedname
$objComp = [ADSI]("LDAP://"+$strCompDN)

# quit if computer is a server or DC
if (($strCompDN -like '*Controller*') -or ($strCompDN -like '*SERVER*')) { exit }

$strUsrLogin = $env:username
$strDateStamp = Get-Date -f 'yyyy-MM-dd@HH:mm'
$IPPattern = "^\d+\.\d+\.\d+\.\d+$"

$colNICs = gwmi Win32_NetworkAdapterConfiguration
if ($colNICs.Count -gt 0) {
foreach ($objNIC in $colNICs){
        if ($objNIC.DefaultIPGateway) {
            $arrIP = $objNIC.IPAddress
            for ($i=0; $i -lt $colNICs.Count; $i++) { 
            if ($arrIP[$i] -match $IPPattern) { $strIP = $arrIP[$i]; $strMAC = $objNIC.MACAddress }
            }
        }
    }
}

$objComp.Description = $strDateStamp + " - " + $strUsrLogin + " - " + $strIP
$objComp.extensionAttribute1 = $strUsrLogin
$objComp.extensionAttribute2 = $strIP
$objComp.extensionAttribute3 = $strMAC
$objComp.SetInfo()
    
por 24.11.2016 / 08:58
2

O truque para saber com certeza onde os usuários fizeram o último login, além das sugestões de Adam, é a agregação de registros. Se você tiver vários controladores de domínio, precisará verificar todos eles ou centralizar o registro e, em seguida, verificar o registro único.

Algumas, talvez até a maioria, de ferramentas de terceiros são inteligentes o suficiente para consultar todos os controladores de domínio. Mas se você está pensando em escrever um roteiro para analisar sozinho, não posso argumentar com força suficiente para a centralização de seus registros.

    
por 24.07.2009 / 00:09
0

A única forma de obter as informações mais recentes é através do log foraging. Use uma ferramenta como o Microsoft Operations Manager ou uma ferramenta gratuita como o snare para agregar logs de eventos interessantes do servidor no local central (arquivos de texto normais ou banco de dados SQL) e use ferramentas como logparser ou consultas SQL para gerar o relatório desejado.

para encontrar diferentes identificações de evento para diferentes eventos Enciclopédia de registro de eventos

Deixe-me saber, se você quiser seguir este caminho, posso ajudá-lo a criar as consultas apropriadas para o logparser.

    
por 25.07.2009 / 09:48
0

O ideal seria que você capturasse o seguinte para sua equipe de CSIRT ajudar em invstigações.

userid fazendo login com nome da estação de trabalho Endereço MAC endereço de IP Data / Timestamp tipo de login (rdp, interfactive etc)

Em seguida, despeje isso em um comando sql em um banco de dados que eles podem consultar. Pedaços e peças são registrados em todo o lugar, mas gravar isso economiza tempo puxando os dados dos servidores DHCP / WINS etc ...

    
por 30.07.2009 / 17:58
0

Se você está procurando uma referência histórica, pode experimentar uma ferramenta de terceiros como Logon Central da Motivate Systems. Ele registra todos os logons de usuários do Active Directory e fornece uma interface da Web para mineração de dados. Ele também inclui alguns gráficos muito bons que convertem as estatísticas de logon em porcentagem de uso.

    
por 26.03.2010 / 20:34
0

ind Login no AD

Muitas vezes, precisamos saber se um login específico faz parte do grupo de usuários do anúncio. Ou, às vezes, precisamos conhecer um grupo AD e saber quem são todos os logins dele.

Existem muitas maneiras diferentes de conseguir isso.

Eu sigo este passo para criar um atalho na minha área de trabalho, onde posso encontrar facilmente os logins Por favor, siga o processo como

START- > EXECUTAR - > rundll32 dsquery, OpenQueryWindow

Você pode encontrar todo o anúncio do qual você faz parte usando isso.

Iniciar- > Configurações- > Painel de controle - > Ferramentas do administrador - > Usuário e Computadores do Active Directory Selecione o domínio que você deseja encontrar login, clique com o botão direito do mouse nesse domínio e escolha a opção "Localizar".

    
por 01.02.2012 / 13:26