Assistance Powershell pour le nettoyage de Active Directory

Je viens de commencer un contrat pour nettoyer un système Active Directory pour une grande entreprise. On m'a dit que ce serait bien le travail occupé, mais après avoir examiné le système et vu combien il est dérangé et désordonné, je me suis rendu compte que je ne serais pas en mesure d'accomplir mes tâches au maximum. Essentiellement, cette société possède trop de comptes qui ne sont pas actifs mais ne peuvent pas encore être supprimés. Je souhaite effectuer un "Scream Test" pour certains comptes et supprimer plus tard. Si ce ne sont que quelques milliers de comptes inactifs, ce serait une histoire, mais malheureusement, il y a quelques milliers (je n'ai pas encore pris de chiffre exact, mais c'est plus de 20 000). J'étais curieux de savoir si quelqu'un connaissait une façon de trier ces informations de manière automatisée autrement que d'utiliser Hyena pour obtenir des rapports et ensuite les passer par eux-mêmes.

Je présumer que votre question réside dans la recherche de comptes inactifs.

J'utilise l'outil Oldcmp de Oldcmp . http://www.joeware.net/freetools/tools/oldcmp/index.htm encore après toutes ces années.

Il peut trouver des comptes AD inactifs en regardant l'âge du mot de passe et spécifiquement LLTS = lastLogonTimestamp

C'est assez simple pour au moins vous démarrer et être plus facile que powershell. Ensuite, désactivez ces comptes et utilisez ADUC pour créer une fenêtre de requête personnalisée pour les comptes désactivés. De cette façon, vous n'avez pas à déplacer tout ce qui pourrait être réactivé ultérieurement.

MAIS … Je suis d'accord avec Hopeless et Mfinni, et je vous dirais mieux de définir clairement ce que vous prévoyez de faire avec la direction avant de mettre en œuvre quoi que ce soit.

J'utilise Powershell pour le faire en appelant la propriété lastlogondate .

Ici, je renvoie tout samaccountname qui a une dernière date de connexion plus de 30 jours (à partir d'aujourd'hui):

 $datenow = Get-date $treshold=$datenow.AddDays(-30) $users=Get-ADuser -Filter * -properties samaccountname,lastlogondate foreach($user in $users) { $lastlogon = $user.lastlogondate if($lastlogon -lt $treshold) { echo $user.samaccountname echo $user.lastlogondate echo "------------------------------------------------" } } 

De là, vous pouvez:

  • Ajustez le seuil de date à vos besoins
  • Désactiver le compte AD ( Désactiver-ADAccount )
  • Quoi que vous souhaitiez (au moins, la plupart des choses)

Les bons conseils ci-dessus sont les suivants: modifier le contrôle et documenter les autorisations. Je voudrais essayer une approche comme celle-ci

Créez un inventaire de compte qui inclut un attribut comme lastLogonTimestamp , pwdLastSet , whencreated et whenchanged . Vous pouvez prendre tout cela avec Powershell et get-ADUser . Je suis sûr que beaucoup de scripts existent sur le Web – le référentiel TechNet Script est un bon endroit pour commencer

Utilisez l'inventaire pour localiser les comptes cibles.

Avant de passer à AD, pensez à tester tout dans un environnement de test. Il existe des scripts dans le référentiel qui vous permettront de créer une copie de l'AD (OUs, utilisateurs et groupes) dans votre environnement de test.

J'ai fait une tâche similaire il y a quelques années, bien que sur une échelle beaucoup plus petite que celle que vous rencontrez. La première chose que nous avons faite était de mettre en œuvre le produit AD Audit de ManageEngine afin de gérer les comptes. Nous avons probablement laissé cela fonctionner pendant quelques semaines afin de générer des mesures avant de faire plus loin. De là, nous avons pu repérer où les connexions de comptes provenaient, et nous avons pu les traiter de manière contrôlée.

AD Audit est un produit assez peu coûteux et les rapports Excel sont plutôt bons, donc nous avons été très heureux de notre décision d'y parvenir.

Voici quelques solutions ci-dessous. Pas trop sûr si c'est ce que vous recherchez.

Exemple n ° 1: recherche les utilisateurs de l'OU dans le domaine domain.local en utilisant la date spécifiée. Vous pouvez les modifier ci-dessous et afficher le Nom d'utilisateur et LastLogonTimestamp comme:

Utilisateur1

13/2/2014

Utilisateur2

12/12/2013

 Import-Module Active Directory $lastdate = "09 April 2014 23:59:59" $users = Get-ADUser -Filter * -SearchBase "ou=users,dc=domain,dc=local" -ResultPageSize 0 -Prop CN,lastLogonTimestamp | Select CN,@{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}} foreach ($user in $users) { if ($user.lastlogontimestamp -lt $lastdate) { echo $user.CN echo $user.lastlogontimestamp.tostring('d/M/yyyy') } } 

Exemple n ° 2: recherche les utilisateurs de l'OU dans le domaine domain.local . Ensuite, exportez-le sur un CSV, puis vous pouvez voir vos données un peu mieux.

 Import-Module ActiveDirectory Get-ADUser -Filter * -SearchBase "ou=users,dc=domain,dc=local" -ResultPageSize 0 -Prop CN,lastLogonTimestamp | Select CN,@{N='lastLogonTimestamp'; E={[DateTime]::FromFileTime($_.lastLogonTimestamp)}} | Export- CSV -NoType .\last.csv 

Avec l'exemple 2, vous pouvez créer une liste d'utilisateurs que vous allez supprimer / désactiver dans CSV / Excel et accéder à la gestion avec ces derniers.

J'espère que cela t'aides!

Comme beaucoup d'autres ont mentionné TEST avant d'apporter des modifications, en particulier lors de la création de scripts ou de la modification de la production en AD.

Je voudrais examiner le module Active Directory gratuit (c'est en fait un Snap-in) de Quest

La cmdlet Quest Get-QADUser inclut différents paratmers liés à l'inactivité, tels que: -Inactive , -InactiveFor , -ExpiredFor , -NotLoggedOnFor et -PasswordNotChangedFor qui vous permettent de déclarer facilement des comptes inactifs en fonction des valeurs fournies à ces paramètres. Je suggère de télécharger le module et d'utiliser Get-Help Get-QADUser -Full | more Get-Help Get-QADUser -Full | more ou si vous avez installé l'ISE, je préfère Get-Help Get-QADUser -Show pour obtenir tous les détails dans une fenêtre distincte.

Un exemple pourrait être:

 Get-QADUser -ExpiredFor 30 -NotLoggedOnFor 30 -PasswordNotChangedFor 90 | Select-Object Name,SamAccountName,PasswordLastSet,PasswordIsExpired,LastLogonTimestamp,AccountIsExpired | Sort-Object Name | Export-CSV C:\InactiveADUsers.csv -NoTypeInformation -Force 

Vous pouvez obtenir une sortie très similaire en utilisant le module AD natif avec un peu plus de graisse de coude.