Articles Tagués ‘Get-ADUser’

AD Guys, Hello again 🙂

Si vous souhaitez connaître la date d’expiration des password de vos comptes users AD, eh bien pouvez simplement exécuter le code PS suivant :

Requirements
  • Lancez Windows PowerShell en tant qu’Admin
  • Exécutez les lignes de codes ci-dessous depuis un DC (not recommended) ou une machine d’administration ayant les outils RSAT installés et notamment le module PowerShell « ActiveDirectory » (recommended :)).

 

HowTo : connaitre la date d’expiration des mots de passes de vos comptes users AD

Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties « DisplayName », « msDS-UserPasswordExpiryTimeComputed » | Select-Object -Property « Displayname »,@{Name= »ExpiryDate »;Expression={[datetime]::FromFileTime($_. »msDS-UserPasswordExpiryTimeComputed »)}}

Tip : si vous souhaitez trier les informations retournées par « Date la plus récente », exécutez la commande suivante :

Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties « DisplayName », « msDS-UserPasswordExpiryTimeComputed » | Select-Object -Property « Displayname »,@{Name= »ExpiryDate »;Expression={[datetime]::FromFileTime($_. »msDS-UserPasswordExpiryTimeComputed »)}} | Sort ExpiryDate -Descending

Le résultat retourné par cette commande est affiché dans la screenshot ci-dessous :

Publicités

 

Comme vous le savez, Microsoft propose un module PS qui vous  permet de créer, gérer et administrer l’annuaire Active Directory (rôle ADDS) via Windows PowerShell : Il s’agit du module « ActiveDirectory « .

Pour obtenir la liste complète des Cmd-lets fournies avec ce module, exécutez la commande suivante :

Get-Command -Module ActiveDirectory

Pour connaître le nombre exact de Cmd-lets fournies avec le module ActiveDirectory, exécutez la commande suivante :

(Get-Command -Module ActiveDirectory).Count

Comme montré ci-dessus, 147 Cmd-lets au total (au moment de l’écriture de cet article) sont disponibles avec le module ActiveDirectory.

Aujourd’hui, nous allons uniquement nous intéresser à la Cmd-Let « Get-ADUser« .

Celle-ci sera utilisée pour :

Connaître la date de changement de mot de passe des utilisateurs de notre annuaire AD

Lister tous les comptes utilisateurs ayant un mot de passe qui n’expire jamais !

 

Introduction à la Cmd-let « Get-ADUser »

La Cmd-let « Get-ADUser » vous permet de lister un ou plusieurs (Objets) utilisateurs Active Directory.

A l’aide de certains paramètres Get-ADUser, vous pouvez réaliser des requêtes/opérations avancées sur des objets « Utilisateurs » ainsi que leurs propriétés.

Quelques exemples d’utilisation :

  • Lister tous les utilisateurs qui ne sont pas connectés depuis 180 jours
  • Lister tous les utilisateurs qui font parti du département « Marketing »
  • Lister tous les utilisateurs qui ont un mot de passe qui n’expire « Jamais »
  • Lister tous les comptes utilisateurs dont le mot de passe expire dans une semaine
  • ..

Vous pouvez consulter cet article pour en savoir plus sur la Cmd-let Get-ADUser.

Paramètres associés avec la Cmd-Let « Get-ADUser »

Pour lister tous les paramètres et options disponibles avec la Cmd-Let Get-ADUser, je vous invite à exécuter la commande suivante :

help Get-ADUser

 

HowTo : connaitre la date de modification/changement du mot de passe de vos utilisateurs AD

Pour connaitre la date à laquelle un mot de passe a été changé/modifié, nous allons d’abord récupérer le nom de la propriété qui stocke cette information.

Pour ce faire, je vais dans l’exemple suivant exécuter la commande Get-ADUser -identity hicham.kadiri -properties * pour afficher toutes les propriétés de la Cmd-Let Get-ADUser (ou hicham.kadiri est le nom d’utilisateur de mon compte AD).

Comme illustré dans la capture d’écran précédente, la propriété qui stocke la date de changement du mot de passe est « PasswordLastSet« .

Dans l’exemple suivant, nous allons afficher la date à laquelle le mot de passe du compte utilisateur « hicham.kadiri » a été changé, seules les propriétés « Name » et « PasswordLastSet » sont sélectionnées :

Get-ADUser -identity hicham.kadiri  -Properties Name, PasswordLastSet | Select Name, PasswordLastSet

Pour obtenir la même information mais au niveau de votre domaine AD (tous les comptes utilisateurs du domaine), la commande suivante est exécutée :

Get-ADUser -Filter * -Properties Name, PasswordLastSet | Select Name, PasswordLastSet

Comme vous pouvez le conster, les informations (dates & heures) retournées au niveau de la colonne « PasswordLastSet » ne sont pas triées.

Si vous souhaitez trier ces données (du plus récent au plus ancien dans l’exemple suivant), la commande suivante est utilisée :

Get-ADUser -Filter * -Properties Name, PasswordLastSet | Select Name, PasswordLastSet | Sort PasswordLastSet -Descending

Tip : lister tous les comptes utilisateurs qui ont un mot de passe qui n’expire jamais peut également être utile car si vous avez défini une nouvelle stratégie de mot de passe (au niveau du domaine ou OU via une PSO/FGPP), celle-ci ne s’appliquera jamais sur les comptes utilisateurs ayant l’option « Le mot de passe n’expire jamais » cochée.

Nous allons dans l’exemple suivant lister tous les comptes utilisateurs dont le mot de passe n’expire jamais, et afficher uniquement les trois propriétés suivantes : Nom, PasswordLastSet et PasswordNeverExpires :

Get-ADUser -Filter * -Properties Name, PasswordLastSet, PasswordNeverExpires | Select Name, PasswordLastSet, PasswordNeverExpires | Sort PasswordLastSet -Descending

Enfin, si vous souhaitez exporter ces informations vers un fichier CSV pour les traiter/présenter plus tard, exécutez la commande suivante :

Get-ADUser -Filter * -Properties Name, PasswordLastSet, PasswordNeverExpires | Select Name, PasswordLastSet, PasswordNeverExpires | Sort PasswordLastSet -Descending | Export-csv C:\AuditAD.csv

 

Dans le cadre d’un audit Active Directory, vous pouvez être amené à lister les comptes Utilisateurs et/ou Ordinateurs AD inactifs, le terme « Inactif » ici, faire référence à l’absence d’activité du compte User ou Computer : pas d’authentification sur le réseau depuis XXX temps.

En dehors des audits AD, lister régulièrement les objets AD (User & Computer) inactifs est une opération (Monthly Operation) que je recommande à tous mes clients, une Task importante à ajouter dans la ToDolist des Admins /Ings Systèmes MS.

Le but étant d’optimiser votre annuaire AD en faisant un CleanUp AD de manière régulière : suppression des objets AD inactifs correspondant à des personnes (salariés, stagiaires, prestataires externes …) ne faisant plus parti de l’entreprise.

Les consoles et outils graphiques intégrés dans Windows Server ne permettent pas d’effectuer ce genre d’opération, en revanche certains outils en ligne de commande le permettent.

Quels Outils utilisés ?

La liste complète des objets « User & Computer » inactifs peut être obtenue via l’utilisation des deux principaux outils suivants :

 DSQuery : outil en ligne de commande (natif)
 Module PowerShell « ActiveDirectory » fourni avec le rôle ADDS ou les outils RSAT ADDS

Note 

Dans les exemples ci-après, un compte utilisateur ou ordinateur est considéré comme étant « inactif » si ce dernier n’a pas présenté d’activité pendant les 30 derniers jours.

#Méthode N°1 : via DSQuery.exe 

Liste des comptes Utilisateurs inactifs (e.i : 4 => 4 semaines => 1 mois)
DSQuery user -inactive 4

Liste des comptes Ordinateurs inactifs
DSQuery Computer -inactive 4

Si vous souhaitez connaître le nombre de comptes Utilisateurs et/ou Ordinateurs inactifs, il suffit de rajouter les paramètres | find /c /i « CN= » après la commande DSQuery :

Nombre de comptes Utilisateurs inactifs
DSQuery User -inactive 4 | find /c /i « CN= »

Nombre de comptes Ordinateurs inactifs
DSQuery Computer -inactive 4 | find /c /i « CN= »

 

#Méthode N°2 : via Windows PowerShell

Note importante : avant d’exécuter le script PS ci-dessous, la valeur de la variable $Domaine doit être changée /remplacée par le Nom DNS de votre domaine AD

 

Liste des comptes Utilisateurs inactifs
Import-Module ActiveDirectory
$Domaine = « hkroot.lan »
$JourInactivite = 30
$Date = (Get-Date).Adddays(-($JourInactivite))
$ListeOrdinateur = Get-ADUser -Filter {LastLogonTimeStamp -lt $Date -and enabled -eq $true} -Properties LastLogonTimeStamp

Liste des comptes Ordinateurs inactifs
Import-Module ActiveDirectory
$Domaine = « hkroot.lan »
$JourInactivite = 30
$Date = (Get-Date).Adddays(-($JourInactivite))
$ListeOrdinateur = Get-ADComputer -Filter {LastLogonTimeStamp -lt $Date -and enabled -eq $true} -Properties LastLogonTimeStamp

 Nombre de comptes Utilisateurs inactifs
Import-Module ActiveDirectory
$Domaine = « hkroot.lan »
$JourInactivite = 30
$Date = (Get-Date).Adddays(-($JourInactivite))
$ListeOrdinateur = Get-ADUser -Filter {LastLogonTimeStamp -lt $Date -and enabled -eq $true} -Properties LastLogonTimeStamp
$ListeOrdinateur.Count

Nombre de comptes Ordinateurs inactifs
Import-Module ActiveDirectory
$Domaine = « hkroot.lan »
$JourInactivite = 30
$Date = (Get-Date).Adddays(-($JourInactivite))
$ListeOrdinateur = Get-ADComputer -Filter {LastLogonTimeStamp -lt $Date -and enabled -eq $true} -Properties LastLogonTimeStamp
$ListeOrdinateur.Count

Le résultat peut être exporté vers un fichier CSV, celui-ci pourra être intégré par la suite dans un  document d’audit format Word ou communiqué séparément.
L’export vers le fichier CSV peut se fair en rajoutant les deux lignes suivantes

Select-object Name,@{Name= »Stamp »; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp)}} | export-csv C:\ListeUtilisateursOUOrdinateursInactifs.csv -notypeinformatio