Powershell : désactiver les comptes ordinateurs AD non connectés depuis 60 jours

Ce script a pour objectif de nettoyer la base des ordinateurs Active Directory en désactivant les machines qui ne sont pas connecté à l’Active Directory depuis plus de 60 jours.
A savoir que vous pouvez le modifier pour :
- Prendre en compte un délais supérieur ou inférieur à 60 jours
- Supprimer un compte ordinateur au lieu de le désactiver (en remplacent la commande Disable-ADComputer par Remove-ADComputer)
- Définir des machines qui ne doivent pas être impactées (avec le filtre -and (Name -notlike « SRV* ») indiquant que les machines dont le nom commence par « SRV » ne seront pas pris en compte)
Afin d’utiliser ce code, créez un fichier .ps1 et copiez-collez y le code ci-dessous :
#=================================
# Script de purge des Pc AD +60jrs
#
# source : www.oameri.com
#=================================
#==== Variables
#=================================
$DaysInactive = 60 #valeur max des jours
$Time = (Get-Date).Adddays(-($DaysInactive))
$CSVfile = "c:\script\OLD_Computer_ToDel.csv"
$iM = 0 # Compteur de machine supprime / reset a 0 en debut de boucle pour le comptage
$TodayTime = Get-Date -UFormat %d-%m-%Y
$RapportTxt = 'c:\script\' + $TodayTime + '_log_purge_AD.txt'
#================================= En tete du rapport a generer
echo "#=================================" > $RapportTxt
echo "# Report on "$TodayTime >> $RapportTxt
echo "#=================================" >> $RapportTxt
echo " Computer desactivated : " >> $RapportTxt
#================================= Recuperation des vieilles machines
Import-module ActiveDirectory
# Recuperation de toutes les machines AD dont la derniere connexion est inferieur au temps indique et dont le nom ne commence pas par SRV et export en CSV
$ComputerToDel = Get-ADComputer -Filter {(LastLogonTimeStamp -lt $Time) -and (Name -notlike "SRV*") -Properties Name, LastLogonTimeStamp | export-csv $CSVfile -notypeinformation
#================================= Traitement de l'extract en CSV
$CSVImport = Import-Csv $CSVfile -Delimiter ","
ForEach ($Ordinateur in $CSVImport){
$Name = $($Ordinateur.Name)
echo $Name >> $RapportTxt
#================================= Desactivation au fil de l'eau
Disable-ADComputer -identity $Name -Confirm:$false
$iM++ # incrementer le compteur
}
#================================= Fin du rapport a generer
echo "#=================================" >> $RapportTxt
echo $iM "Computer have been Desactivated" >> $RapportTxt
echo "#=================================" >> $RapportTxt
#================================= Envoi par email du rapport
$MailTo = "destinataire@free.fr"
$MailCC = "copiecarbone@free.fr"
$MailFrom = "Machine desactive de l'AD < expediteur@free.fr >"
$MailSmtp = "smtp.free.fr"
Send-MailMessage -From $MailFrom -To $MailTo -CC $MailCC -Subject "AD - Purge des Workstations" -Body "Voir le fichier de log en PJ" -Attachment $RapportTxt -SmtpServer $MailSmtp
Désactiver comptes ordinateurs
Avant de l’utiliser, pensez à modifier les variables du scripts :
- $DaysInactive :
- $CSVfile : indiquez-y le nom de votre contrôleur de domaine Active Directory
- $RapportTxt : indiquez-y le chemin d’accès complet vers votre fichier .txt de sortie
Ainsi que les variables des paramètres de mails :
- $MailTo : adresse email du destinataire
- $MailCC : adresse email de la copie carbone
- $MailFrom : adresse email de l’expéditeur
- $MailSmtp : serveur smtp pour l’envoi
attention il manque une ‘}’ après « (Name -notlike « SRV* ») »
merci pour ce partage !