Il est possible d''interroger l''attribut Lastlogon ou lastlogontimestamp pour avoir une idée de la dernière ouverture de session de vos utilisateurs. Mais par défaut lastlogon n''est pas répliqué entre les DC et lastlogontimestamp peut avoir un décalage de plusieurs jours jusqu'à 14.
Une solution est d''intérroger l''ensemble des DC et de récupérer pour chaque utilisateur la valeur la plus rescente. Le script ci dessous peut vous y aider.
A noter par défaut lastlogon est un entier qui définit le nombre de 100 nano secondes depuis le 1/01/1601. Donc si le scrit vous donne cette date c''est que l''utilisateur n''a jamais ouvert de session ...
# Import-Module ActiveDirectory
function Get-ADUserLastLogon([string]$userName)
{
$dcs = Get-ADDomainController -Filter {Name -like "*"}
$time = 0
foreach($dc in $dcs)
{
$hostname = $dc.HostName
$user = Get-ADUser $userName | Get-ADObject -Properties lastLogon
if($user.LastLogon -gt $time)
{
$time = $user.LastLogon
}
}
$dt = [DateTime]::FromFileTime($time)
return $dt
}
function TabLastLogon
{
param([string]$n,[datetime]$d)
$obj = New-Object PSObject
$obj | Add-Member -name Login -membertype NoteProperty -Value ($n)
$obj | Add-Member -name Last -membertype NoteProperty -Value ($d)
return $obj
}
$Liste=@()
$user_list = Get-ADUser -Filter *
foreach ($u in $user_list)
{
$last=Get-ADUserLastLogon -UserName $u.samaccountname
$liste+=TabLastLogon -n $u.samaccountname -d $last
# Write-Host $u.samaccountname "last logged on at:" $last
}
$Liste | Format-Table
Commentaires
Cool
Impeccable, au moins un truc qui fonctionne sur le net :)