PowerShell – Trouvez les utilisateurs et les ordinateurs désactivés ou inactifs dans AD

De plus en plus populaire, PowerShell est devenu le premier choix des administrateurs Windows pour collecter les informations de systèmes cibles. Chaque rôle Windows dispose de ses propres modules PowerShell. Active Directory est livré avec plus de 450 cmdlets PowerShell, qui permettent de collecter des informations sur chaque objet d’Active Directory, par exemple les comptes d’ordinateur et les comptes d’utilisateur désactivés, mais aussi d’interagir avec le moteur ADSI pour effectuer certaines opérations utiles, de vérifier la santé des contrôleurs de domaine, de collecter des informations sur la stratégie de groupe, etc.

Dans la première partie de cet article, nous vous expliquons comment utiliser des commandes PowerShell simples pour trouver des comptes d’utilisateur désactivés, des comptes d’ordinateur désactivés et des comptes d’utilisateur inactifs dans un seul domaine Active Directory. Dans la seconde partie de l’article, nous vous proposons un script PowerShell pratique qui vous permet de collecter les mêmes informations dans plusieurs domaines Active Directory.

Comment trouver des informations sur les comptes désactivés dans un domaine unique

  • Collecter des informations sur les comptes d’ordinateur désactivés

Même si Microsoft n’a pas conçu de cmdlet PowerShell spécifique pour collecter les comptes d’ordinateur désactivés, vous pouvez utiliser le cmdlet Get-ADComputer. Pour collecter des informations sur les comptes d’utilisateur désactivés, vous pouvez utiliser le cmdlet Search-ADAccount PowerShell, tel qu’expliqué plus loin.

Get-ADComputer -Filter {(Enabled -eq $False)} -ResultPageSize 2000 -ResultSetSize $null -Server <AnyDomainController> -Properties Name, OperatingSystem

Comme vous pouvez le constater dans la commande ci-dessus, nous demandons au cmdlet Get-ADComputer de rechercher les comptes d’ordinateur dont la propriété « Enabled » (Activé) est définie comme $False, ce qui indique que le compte est désactivé.

Pour exporter le résultat dans un fichier CSV, utilisez le cmdlet Export-CSV comme indiqué dans la commande suivante :

Get-ADComputer -Filter {(Enabled -eq $False)} -ResultPageSize 2000 -ResultSetSize $null -Server <AnyDomainController> -Properties Name, OperatingSystem | Export-CSV “C:\Temp\DisabledComps.CSV” -NoTypeInformation
  • Collecter des informations sur les comptes d’utilisateur désactivés

Pour trouver des comptes d’utilisateur désactivés dans Active Directory, utilisez le cmdlet Search-ADAccount, conçu pour interroger tout compte dans Active Directory. Ce cmdlet prend en charge un certain nombre de propriétés. Les principaux paramètres que vous pouvez spécifier dans Search-ADAccount sont, au choix, –UsersOnly ou –ComputersOnly. Si vous spécifiez –UsersOnly, Search-ADAccount recherche uniquement les objets utilisateur, et si vous spécifiez –ComputersOnly, seuls les comptes d’ordinateur sont recherchés. Pour interroger les comptes d’utilisateur désactivés dans Active Directory, vous pouvez exécuter la commande suivante :

Search-ADAccount –AccountDisabled –UsersOnly –ResultPageSize 2000 –ResultSetSize $null | Select-Object SamAccountName, DistinguishedName

Notez que Search-ADAccount prend en charge le paramètre « -AccountDisabled ». En utilisant le paramètre « -AccountDisabled », vous demandez à Search-ADAccount de ne rechercher que les comptes d’utilisateur ou d’ordinateur désactivés. Pour exporter le résultat dans un fichier CSV, utilisez le cmdlet Export-CSV comme indiqué dans la commande suivante :

Search-ADAccount –AccountDisabled –UsersOnly –ResultPageSize 2000 –ResultSetSize $null | Select-Object SamAccountName, DistinguishedName | Export-CSV “C:\Temp\DisabledUsers.CSV” -NoTypeInformation
  • Collecter des comptes d’utilisateur inactifs

Pour trouver des comptes d’utilisateur inactifs dans Active Directory, vous pouvez utiliser le cmdlet Search-ADAccount. Il vous suffit pour cela d’utiliser le paramètre « -AccountInActive » avec Search-ADAccount, comme indiqué dans la commande PowerShell ci-dessous :

Search-ADAccount –AccountInActive –TimeSpan 90:00:00:00 –ResultPageSize 2000 –ResultSetSize $null | ?{$_.Enabled –eq $True} | Select-Object Name, SamAccountName, DistinguishedName | Export-CSV “C:\Temp\InActiveUsers.CSV” –NoTypeInformation

La commande ci-dessus utilise le paramètre -TimeSpan pour trouver les comptes d’utilisateur inactifs depuis 90 jours. Le résultat est exporté dans le fichier C:\Temp\InActiveUsers.CSV.

Comment trouver des informations sur les comptes désactivés dans plusieurs domaines

Pour collecter des informations dans plusieurs domaines Active Directory, vous devez vérifier que le script PowerShell est capable de parcourir en boucle chaque domaine qu’il trouve dans une forêt Active Directory, puis d’exécuter les commandes PowerShell sur le domaine pour recueillir les informations nécessaires. Vous pouvez utiliser le cmdlet PowerShell ForEach pour exécuter les commandes PowerShell dans chaque domaine Active Directory, mais vous devez également vous assurer que les données de chaque domaine sont collectées dans un fichier CSV distinct. En résumé, lorsque vous collectez des comptes d’utilisateur désactivés, des comptes d’ordinateur désactivés et des comptes d’utilisateur inactifs dans les domaines Active Directory, vous devez concevoir un script PowerShell capable de satisfaire les besoins suivants :

  • Une équipe informatique distincte pour chaque domaine Active Directory.
  • Un script unique pouvant collecter les informations de tous les domaines Active Directory. En d’autres termes, vous devez concevoir un script ne pouvant être exécuté qu’une seule fois pour collecter les informations requises dans tous les domaines Active Directory.
  • La possibilité de stocker les informations sur les comptes d’utilisateur désactivés, les comptes d’ordinateur désactivés et les comptes d’utilisateurs inactifs dans un fichier CSV distinct pour chaque domaine. Une fois que vous disposez de fichiers CSV distincts pour chaque domaine, vous pouvez distribuer les fichiers CSV à l’équipe informatique de chaque domaine pour qu’elle prenne les mesures nécessaires.

Utilisez le script PowerShell ci-dessous en gardant à l’esprit les exigences ci-dessus. Mais avant cela, assurez-vous de satisfaire les exigences suivantes :

  • Vous devez exécuter le script à partir d’un système d’exploitation Windows Server 2012 ou ultérieur.
  • Le nom de forêt Active Directory utilisé par le script est « NetWrix.com ». Vous devez changer le nom de la forêt Active Directory dans la variable $CurForestName, puis exécuter le script.
  • Assurez-vous d’installer les modules PowerShell pour Active Directory sur l’ordinateur depuis lequel vous allez exécuter le script.
  • Assurez-vous de créer un répertoire dont le nom est « C:\Temp » sur l’ordinateur local.
  • Vous devez ouvrir la fenêtre PowerShell en mode élevé.
  • Vous devez avoir l’autorisation d’accéder à tous les domaines Active Directory.

Après avoir rempli les conditions ci-dessus, vous pouvez exécuter le script PowerShell ci-dessous :

$DomList = "C:\Temp\DomList.TXT"
remove-item $DomList -ErrorAction SilentlyContinue
$CurForestName="NWBlog.Com"
$GetForest=Get-ADForest $CurForestName
$Items = $R.Domains
ForEach ($Domains in $Items)
{
    Add-Content $DomList $Domain.Name
}
Write-Host "Starting Script..."
ForEach ($DomInFile in $DomList)
{
    $DisabledCompsCSV = "C:\Temp\DisabledAccounts_Computers_"+$DomInFile+".CSV"
    Remove-item $DisabledCompsCSV -ErrorAction SilentlyContinue
    $DisabledUsersCSV = "C:\Temp\DisabledAccounts_Users_"+$DomInFile+".CSV"
    Remove-item $DisabledUsersCSV -ErrorAction SilentlyContinue
    $InActiveUsersReport = "C:\Temp\InactiveUsers_"+$DomInFile+".CSV"
    Remove-item $InActiveUsersReport -ErrorAction SilentlyContinue


    Get-ADComputer -Server $DomInFile –Filter {(Enabled –eq $False)} –ResultPageSize 2000 –ResultSetSize $null -Properties Name, OperatingSystem | Export-CSV $DisabledCompsCSV -NoTypeInformation   
    Search-ADAccount -Server $DomInFile –AccountDisabled –UsersOnly –ResultPageSize 2000 –ResultSetSize $null | Select-Object SamAccountName, DistinguishedName | Export-CSV $DisabledUsersCSV –NoTypeInformation   
    Search-ADAccount -Server $DomInFile –AccountInActive –TimeSpan 90:00:00:00 –ResultPageSize 2000 –ResultSetSize $null | ?{$_.Enabled –eq $True} | Select-Object Name, SamAccountName, DistinguishedName | Export-CSV $InActiveUsersReport –NoTypeInformation

}
Write-Host "Script Finished collecting required information. Veuillez vérifier les fichiers de rapport dans le dossier C:\Temp"

En résumé, le script complet est facile à comprendre, mais pour que vous saisissiez bien ses objectifs, le script remplit les fonctions suivantes :

  • Ce script collecte tous les domaines Active Directory de la forêt Active Directory spécifiée dans la variable $CurForestName, puis il stocke les noms de domaine dans le fichier C:\Temp\DomList.CSV.
  • Le fichier « C:\Temp\DomList.CSV » est utilisé par la deuxième boucle « ForEach » du script.
  • Le script collecte les utilisateurs désactivés, les comptes d’ordinateur désactivés et les comptes d’utilisateur inactifs de chaque domaine en exécutant les commandes Get-ADComputer et Search-ADAccount PowerShell.
  • Un rapport est généré dans un fichier CSV pour chaque domaine. Vous trouverez tous les rapports CSV dans le dossier C:\Temp de l’ordinateur depuis lequel vous avez exécuté le script.

Une fois les rapports CSV générés, vous pouvez envoyer par e-mail des fichiers de sortie à toutes les équipes informatiques, ou intégrer le cmdlet « Send-MailMessage » dans le script pour que le script envoie un e-mail avec un rapport CSV à toutes les équipes informatiques. Nous parlerons du cmdlet « Send-MailMessage » dans la prochaine partie de cette série d’articles.

Si vous êtes très occupé, essayez des outils gratuits qui automatisent cette tâche, et gagnez du temps ! Par exemple, avec l’outil Inactive User Tracker, vous pouvez rapidement nettoyer ou verrouiller tous vos comptes d’utilisateur périmés.  Partagez vos réflexions et les outils que vous utilisez pour détecter les comptes périmés dans les commentaires ci-dessous.