#
# Get-Lastlogon
#
# Auteur : Johan
# Contact : johan@slashroot.fr
# Date : 24/03/14
# Version : 1.0
# Description : Récupère la date de dernière connexion d'un utilisateur ou d'un ordinateur
# Commentaire : Le lastlogon n'etant pas replique entre les DCs, le script recupere les valeurs de chaque DC puis selectionne la plus recente
# Requis : Module ActiveDirectory
# On importe le module ActiveDirectory
Import-Module ActiveDirectory -ErrorAction SilentlyContinue
# Si le module est bien présent
if ($? -eq 'true')
{
# On lance la boucle pour chaque demande (utilisateur/ordinateur)
do {
# On lance la boucle pour la séléction du type (utilisateur ou ordinateur) afin de prendre en compte les fautes de frappe
$i=0
while ($i -eq 0)
{
# Mise en forme de l'affichage
echo "`nAfficher la date de derniere connexion d'un :`n"
echo "1 - Utilisateur"
echo "2 - Ordinateur`n"
# Demande du type
$choix = Read-host "Choix"
echo ""
# Demande du login utilisateur ou nom de machine puis test de l'existence du compte
# Si l'utilisateur existe, on continue le script, sinon, on recommence le script
switch ($choix){
1 {$name = Read-host "Login de l'utilisateur "; echo "" ; if ((Get-ADUser -Filter {sAMAccountName -eq $name}) -ne $null) { $i=1 } else { echo "L'utilisateur n'existe pas !`n" }; break}
2 {$name = Read-host "Nom de la machine "; echo "" ; if ((Get-ADComputer -Filter {name -eq $name}) -ne $null) { $i=1 } else { echo "L'ordinateur n'existe pas !`n" }; break}
default {"Mauvais choix !`n"; break}
}
}
# On récupère la liste de tous les DC du domaine
$liste_DC = (Get-ADDomainController -Filter *).HostName
# On fixe les variables
$lastLogon = 0
$logonDC = $null
# Pour chaque DC du domaine
foreach ($dc in $liste_DC)
{
# On formule la requête selon le type et on récupère la valeur
switch ($choix){
1 {$res = Get-ADUser $name -Properties LastLogon -Server $dc ; break}
2 {$res = Get-ADComputer $name -Properties LastLogon -Server $dc ; break}
}
# Si le lastlogon est plus récent, on prend la valeur et le nom du DC
if ($lastLogon -lt $res.LastLogon)
{
$lastLogon = $res.LastLogon
$logonDc = $dc
}
}
# On converti le lastlogon au format date
$lastLogon = [DateTime]::FromFileTime($lastLogon)
# On affichage le lastlogon et le DC correspondant
echo "Derniere connexion : $lastlogon"
echo "Serveur : $logonDC`n"
# On propose de relancer le script pour un autre compte
$quit = Read-Host “On continue ? (O/n)”
}
until (($quit -eq “n”) -or ($quit -eq “N”))
}
else
{
# Si le module est absent, on abandonne le script
echo "Il faut le module ActiveDirectory !"
}
15 juillet 2017