[Powershell] Récupérer la date de dernière connexion

#
# 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 !"
}
3 Comments

Add a Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *