#Informations récupérées : suffixe des userPrincipalName (UPN) et fréquence d'utilisations dans les domaines choisis
#Prérequis : l'utilisateur qui lance le script doit pouvoir lire l'Active Directory en PowerShell
#List de paramètres qui permettent de récupérer soit la fréquence des UPN de l'ensemble des domaines Active Directory (AD) de la forêt ou de spécifier les domaines dans lesquels chercher
#Exemple 1 d'utilisation du script : .\Get-UPNSuffixFrequency.ps1 -SearchInAllDomainsOfTheForest
#Exemple 2 d'utilisation du script : .\Get-UPNSuffixFrequency.ps1 -SpecifyDomains customer.intern, technical.intern
Param
(
#Paramètre de type switch qui s'il est utilisé va récupérer la fréquence des suffixes UPN de l'ensemble des domaines AD de la forêt
[Parameter(Mandatory=$false)]
[switch]$SearchInAllDomainsOfTheForest,
#Paramètre de type tableau qui s'il est utilisé va réucupérer la fréquence des suffixes UPN dans les domaines AD mentionnés
[Parameter(Mandatory=$false)]
[array]$SpecifyDomains
)
#Importe le module Active Directory qui contient des commandes utilisées dans le script
Import-Module ActiveDirectory
#Si le paramètre de type switch $SearchInAllDomainsOfTheForest est utilisé, récupère les noms de tous les domaines dans la forêt AD
if ($SearchInAllDomainsOfTheForest)
{
$Domains = Get-ADForest | Select-Object Domains
$Domains = $Domains.Domains
}
#Si le paramètre de type tableau $SpecifyDomains est utilisé, ajoute les noms des domaines spécifiés comme base de recherche pour la fréquence des suffixes UPN
if ($SpecifyDomains)
{
$Domains = $SpecifyDomains
}
#Variable globale qui va contenir l'ensemble des UPN des utilisateurs des domaines requêtés
$AllUsersObjects = @()
#Parcours chaque domaine requêté et récupère l'ensemble des UPN des utilisateurs
foreach ($Domain in $Domains)
{
#Récupére l'ensemble des utilisateurs du domaine actuellement requêté
$UsersObjectsFromDomain = Get-ADUser -Filter * -Server $Domain -Properties userPrincipalName | Select-Object userPrincipalName
#Ajoute les utilisateurs du domaine actuellement requêté a la variable globale qui va contenir l'ensemble des UPN des utilisateurs des domaines requêtés
$AllUsersObjects += $UsersObjectsFromDomain
}
#Commande qui va récupérer l'ensemble des suffixes UPN utilisables dans l'AD
$ADForestObject = Get-ADForest | Select-Object UPNSuffixes
#Créer un tableau qui contiendra l'ensemble des suffixes UPN et leur fréquence
$Array = @()
#Parcours l'ensemble des suffixes UPN dans l'AD et les compare à la liste de l'ensemble des utilisateurs des domaines requêtés
foreach ($UPNSuffixe in $ADForestObject.UPNSuffixes)
{
#Initialise la fréquence du suffixe UPN actuellement requêté à 0
$UPNSuffixeOccurence = 0
#Créer un objet PowerShell qui contiendra le suffixe UPN actuellement requêté et sa fréquence d'utilisation dans les domaines requêtés
$Line = New-Object PSObject
#Ajoute à l'object PowerShell précédemment crée, le suffixe UPN actuellement requêté
$Line | Add-Member -MemberType NoteProperty -Name "UPNSuffixe" -Value $UPNSuffixe
#Boucle qui va comparer le suffixe UPN actuellement requêté avec chaque utilisateur des domaines requêtés et comptabilise la fréquence d'utilisation
foreach ($UserObject in $AllUsersObjects)
{
#Vérifie que l'UPN de l'utilisateur actuellement requêté n'est pas vide
if ($UserObject.userPrincipalName)
{
#Sépare le préfixe du suffixe UPN de l'utilisateur actuellement requêté
$UserUPNSuffixe = (($UserObject.userPrincipalName).Split('@'))[1]
#Compare la valeur du suffixe UPN de l'utilisateur actuellement requêté avec le suffixe UPN actuellement requêté
if ($UserUPNSuffixe -eq $UPNSuffixe)
{
#Si la valeur du suffixe UPN de l'utilisateur actuellement requêté et le suffixe UPN actuellement requêté sont égaux, incrémente de 1 le nombre d'utilisation du suffixe UPN
$UPNSuffixeOccurence += 1
}
}
}
#Une fois que l'ensemble des suffixes UPN des utilisateurs des domaines requêtés ont été comparés au suffixe UPN actuellement requêté, ajoute la fréquence du suffixe UPN à l'objet PowerShell précédemment crée
$Line | Add-Member -MemberType NoteProperty -Name "UPNSuffixeOccurence" -Value $UPNSuffixeOccurence
#Ajoute à la variable globale qui contient l'ensemble des suffixes UPN et leur fréquence, l'objet PowerShell précédemment crée lors de l'itération courante
$Array += $Line
#Supprime les valeurs des variables propres au suffixe UPN actuellement requêté
Clear-Variable UPNSuffixe, Line
}
#Affiche sous forme de liste tableau l'ensemble des suffixes UPN et leurs fréquences d'utilisation
$Array
<# Exemple d'affichage
UPNSuffixe UPNSuffixeOccurence
---------- -------------------
customer.intern 47
technical.intern 42
#>