A última replicação de logon do Active Directory em servidores AD

2

Precisamos executar uma consulta que desativará automaticamente uma conta após n dias de inatividade. Foi-me dito que, como temos vários servidores do AD, se um usuário fizer logon, digamos que para ADserver1 as informações do último logon não serão replicadas para o ADserver2. Como posso ter as informações do último logon replicadas em todos os servidores AD?

    
por Robert Murillo 14.03.2013 / 16:27

2 respostas

2

Aqui está um roteiro de Powershell escrito por Richard Mueller que eu achei útil. Ele consulta TODOS os servidores do AD em seu domínio e informa o tempo de logon mais recente para todos os usuários / computadores, portanto, é possível que algumas edições manuais sejam necessárias para atender às suas necessidades. Faz um bom ponto de partida.

# PSLastLogon.ps1
# PowerShell script to determine when each user in the domain last
# logged on.
#
# ----------------------------------------------------------------------
# Copyright (c) 2011 Richard L. Mueller
# Hilltop Lab web site - http://www.rlmueller.net
# Version 1.0 - March 16, 2011
#
# This program queries every Domain Controller in the domain to find the
# largest (latest) value of the lastLogon attribute for each user. The
# last logon dates for each user are converted into local time. The
# times are adjusted for daylight savings time, as presently configured.
#
# You have a royalty-free right to use, modify, reproduce, and
# distribute this script file in any way you find useful, provided that
# you agree that the copyright owner above has no warranty, obligations,
# or liability for such use.

Trap {"Error: $_"; Break;}

$D = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
$Domain = [ADSI]"LDAP://$D"
$Searcher = New-Object System.DirectoryServices.DirectorySearcher
$Searcher.PageSize = 200
$Searcher.SearchScope = "subtree"


# Switch this to search for computers or users
$Searcher.Filter = "(&(objectCategory=computer))"
# $Searcher.Filter = "(&(objectCategory=user))"

$Searcher.PropertiesToLoad.Add("distinguishedName") > $Null
$Searcher.PropertiesToLoad.Add("lastLogon") > $Null

# Create hash table of users and their last logon dates.
$arrUsers = @{}

# Enumerate all Domain Controllers.
ForEach ($DC In $D.DomainControllers)
{
    $Server = $DC.Name
    $Searcher.SearchRoot = "LDAP://$Server/" + $Domain.distinguishedName
    $Results = $Searcher.FindAll()
    ForEach ($Result In $Results)
    {
        $DN = $Result.Properties.Item("distinguishedName")
        $LL = $Result.Properties.Item("lastLogon")
        If ($LL.Count -eq 0)
        {
            $Last = [DateTime]0
        }
        Else
        {
            $Last = [DateTime]$LL.Item(0)
        }
        If ($Last -eq 0)
        {
            $LastLogon = $Last.AddYears(1600)
        }
        Else
        {
            $LastLogon = $Last.AddYears(1600).ToLocalTime()
        }
        If ($arrUsers.ContainsKey("$DN"))
        {
            If ($LastLogon -gt $arrUsers["$DN"])
            {
                $arrUsers["$DN"] = $LastLogon
            }
        }
        Else
        {
            $arrUsers.Add("$DN", $LastLogon)
        }
    }
}

# Output latest last logon date for each user.
$Users = $arrUsers.Keys
ForEach ($DN In $Users)
{
    $Date = $arrUsers["$DN"]
    If ($Date -eq "01/01/1601 00:00:00") {$Date = "1/1/1900 12:00:00"}
    $DN = [regex]::Match($DN,'CN=([^,]+)').Groups[1].Value 
    "'"$DN'",$Date"
}
    
por 14.03.2013 / 18:16
1

As últimas informações de login são replicadas automaticamente entre os controladores de domínio.

Se não estiver em seu ambiente, a replicação será interrompida e a recuperação dos últimos tempos de login dos usuários será o menor dos seus problemas, já que sua implementação do AD está irremediavelmente interrompida (ou logo quando seus controladores de domínio começarem a desmembrar cada um deles) outro).

Incidentalmente, parece que este artigo no lastLogontimestamp pode ser do seu interesse .

The lastLogontimeStamp attribute is not updated every time a user or computer logs on to the domain. The decision to update the value is based on the current date minus the value of the (ms-DS-Logon-Time-Sync-Interval attribute minus a random percentage of 5). If the result is equal to or greater than lastLogontimeStamp the attribute is updated. There are no special considerations for replication of lastLogontimeStamp. If the attribute is updated it is replicated like any other attribute update.

Como pode ser este, no último logon Atributo .

This attribute is not replicated and is maintained separately on each domain controller in the domain. To get an accurate value for the user's last logon in the domain, the Last-Logon attribute for the user must be retrieved from every domain controller in the domain. The largest value that is retrieved is the true last logon time for that user.

    
por 14.03.2013 / 16:32