[Powershell] Liste des utilisateurs ne s’étant pas connectés au domaine depuis plus de 30 jours

# Nom : Comptes_inactifs.ps1
# Date : 17/02/2012
# Auteur : Johan
# Description : Liste les utilisateurs qui ne se sont pas connectés au domaine depuis
# plus de 30 jours et envoi le résultat par mail
# Commentaire : Exécution tous les 1er du mois

# Recherche dans l'OU souhaité tous les comptes utilisateurs
$ldapquery = [ADSI] 'LDAP://OU=Utilisateurs,DC=em-corporation,DC=fr'
$objrechercher = New-object system.directoryservices.directorysearcher($ldapQuery)
$objrechercher.filter ='(&(objectClass=person)(objectCategory=person))'
$boucle = $objrechercher.findall()

$liste=""

# Fonction Get-UTCAge permettant de transformer la valeur du lastlogon en date afin de calculer le nombre de jours depuis la dernière connexion
Function Get-UTCAge {
	Param([int64]$Last=0)
	if ($Last -eq 0) {
    }
    else
    {
	[datetime]$utc="1/1/1601"
	$i=$Last/864000000000
        $lastlogon = ($utc.adddays($i))
        $today=get-date
        $diff=($today)-($lastlogon)

        # Si l'utilisateur ne s'est pas connecté depuis au moins 30 jours on ajoute son nom à la liste
	if ($diff.Days -gt 30)
        {
	     write "$name`r"
        }
	}
} 

# Pour chaque utilisateur
foreach ($user in $boucle)
{
    # On vérifie qu'il possède une adresse email (permettant de différencier les comptes utilisateurs des comptes génériques ou applicatifs)
    if ($user.properties.mail)
    {
        # On récupère le nom et le lastlogon de l'utilisateur
        $name = $user.properties.name
        $last = $user.Properties.lastlogon

        $liste+=Get-UTCAge $user.properties.item("lastlogon")[0]
    }
}

# On prépare et on envoi le mail
$expediteur = "bob@em-corporation.fr"
$destinataire = " admin@em-corporation.fr"
$serveur = "@MTA"
$objet = "Active Directory - Utilisateurs inactifs"
$texte = "Bonjour,`r`rVoici la liste des utilisateurs ne s'étant pas connectés au domaine depuis plus de 30 jours :`r`r$liste`rCordialement`r--`rBob"

$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte

$SMTPclient = new-object System.Net.Mail.SmtpClient $serveur
$SMTPclient.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials

$SMTPclient.Send($message)
Tags:
8 Comments

Add a Comment

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