4 votes

Assistance Powershell pour le nettoyage d'Active Directory

Je viens de commencer un contrat pour nettoyer le système Active Directory d'une grande entreprise. On m'a dit que ce serait un travail assez prenant, mais après avoir examiné le système et vu à quel point il est désorganisé et en désordre, j'ai réalisé que je ne serai pas en mesure de remplir mes fonctions de manière optimale. Essentiellement, cette société a beaucoup trop de comptes qui ne sont pas actifs mais qui ne peuvent pas encore être supprimés. Je veux effectuer un "Scream Test" pour certains comptes et les supprimer plus tard. S'il ne s'agissait que de quelques milliers de comptes inactifs, ce serait une histoire, mais malheureusement il y en a plusieurs milliers (je n'ai pas encore pris le chiffre exact, mais il est supérieur à 20 000). J'étais curieux de savoir si quelqu'un connaissait un moyen de trier ces informations de manière automatisée, sans utiliser Hyena pour obtenir des rapports et les passer en revue un par un.

2 votes

(I haven't taken an exact number yet but it is over 20,000) C'est ce que nous, professionnels, appelons un "drapeau rouge". Si ce n'est pas trop tard, exécuter loin. Ne marchez pas, courez. S'il est trop tard pour le faire, dites-leur que vous aurez besoin de plus d'argent. Beaucoup plus d'argent. S'ils viennent avec beaucoup plus d'argent, il n'est pas très difficile de créer un script PowerShell script qui peut désactiver des comptes (et peut-être les déplacer, si vous le souhaitez) sur la base d'attributs AD comme la dernière heure de connexion. Assurez-vous que votre assurance E&O est à jour, mais surtout, exécuter loin de celui-ci. On dirait qu'ils ont un nouveau directeur, pas un nettoyage.

2 votes

Je ne veux pas m'enfuir. Je travaille dans le domaine de l'informatique depuis environ 6 ans maintenant, mais c'est la première fois que je m'éloigne du Help Desk/Service Desk/Desktop Support et je me dis que c'est une bonne façon de m'y mettre. Je suis payé assez décemment par rapport à ce que j'ai été payé auparavant. Où pourrais-je commencer à apprendre ces scripts ? La documentation de MSDN est atroce.

2 votes

I don't want to run away. Vous le faites vraiment... mais je suppose que tout le monde doit apprendre des choses à la dure. Assurez-vous au moins d'être couvert par une assurance contre les erreurs et les omissions, d'autant plus que vos premiers pas loin du service d'assistance sont la mère de tous les champs de mines. Quant à savoir où vous apprenez ces scripts... Les livres de O'Reilly. Ceux de Google sont utiles. Technet's Scripting Guy Blog pourrait être un autre point de départ. Il y a un post relativement d'actualité ici que vous pourriez adapter.

7voto

Craig Points 361

Je suppose que votre question porte sur la recherche de comptes inactifs.

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

Il peut trouver des comptes AD inactifs en examinant l'ancienneté du mot de passe et en particulier LLTS = lastLogonTimestamp

C'est assez simple pour que vous puissiez au moins commencer et plus facile que powershell. Désactivez ensuite 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 quoi que ce soit qui pourrait avoir besoin d'être réactivé plus tard.

MAIS... je suis d'accord avec Hopeless et Mfinni, et je dirais que vous feriez mieux d'exposer clairement ce que vous comptez faire avec la direction AVANT de mettre en œuvre quoi que ce soit.

1voto

krisFR Points 12580

J'utilise Powershell pour le faire, en appelant la fonction lastlogondate correct.

Ici, je renvoie tout samaccountname dont la date de dernière connexion remonte à 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 :

  • Adaptez le seuil de date à vos besoins
  • Désactiver le compte AD ( Disable-ADAccount )
  • Tout ce que vous voulez (au moins, la plupart des choses)

0 votes

L'attribut n'est-il pas "lastlogontimestamp" ?

1 votes

C'est juste LastLogon et il n'est pas adapté à cet usage car il n'est pas répliqué. LastLogonTimestamp est une excellente alternative, mais un peu difficile à comprendre !

0 votes

J'ai une question. Je suis relativement nouveau dans l'utilisation de Powershell, mais il semble que j'y arrive assez rapidement. Comment puis-je m'y prendre pour spécifier un sous-ensemble plus spécifique d'utilisateurs. Par exemple : Il y a 30 000 utilisateurs dans l'OU USER. Cependant, ils sont répartis en groupes distincts et je veux diviser un peu le travail et travailler sur chaque groupe un par un. Donc, si je voulais spécifier un OU différent dans le OU USER, où et quoi devrais-je mettre dans le script ?

0voto

uSlackr Points 6447

Bons conseils ci-dessus concernant le contrôle des changements et la documentation des autorisations. J'essaierais une approche comme celle-ci

Établir un inventaire du compte qui comprend des attributs tels que lastLogonTimestamp , pwdLastSet , whencreated y whenchanged . Vous pouvez saisir tout cela avec Powershell et get-ADUser . Je suis sûr que beaucoup de script existent sur le web - le dépôt de script de TechNet est un bon point de départ.

Utilisez l'inventaire pour localiser les comptes cibles.

Avant d'apporter une modification à AD, pensez à tout tester dans un environnement de test. Il existe quelques scripts dans le référentiel qui vous permettront de faire une copie d'AD (OUs, Users & groups) dans votre environnement de test.

0voto

Trondh Points 4161

J'ai effectué une tâche similaire il y a quelques années, mais à une échelle beaucoup plus petite que celle à laquelle vous êtes confronté. La première chose que nous avons faite a été de mettre en œuvre le produit AD Audit de ManageEngine afin de maîtriser les comptes. Nous avons probablement laissé ce produit fonctionner pendant quelques semaines afin de générer des métriques avant d'aller plus loin. À partir de là, nous avons pu déterminer d'où provenaient les connexions aux comptes et nous avons pu les traiter de manière contrôlée.

AD Audit est un produit relativement peu coûteux et les rapports Excel sont très bons. Nous sommes donc très satisfaits de notre décision.

0voto

arsaKasra Points 223

Vous trouverez ci-dessous quelques solutions. Je ne sais pas si c'est ce que vous recherchez.

Exemple n° 1 : Cela permettra de rechercher le OU Utilisateurs dans le domaine domain.local en utilisant la date spécifiée. Vous pouvez les modifier ci-dessous et éditer le Nom d'utilisateur : y LastLogonTimestamp comme :

Utilisateur 1

13/2/2014

Utilisateur 2

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 : Cela permettra de rechercher le OU Utilisateurs dans le domaine domain.local . Ensuite, exportez-le vers un CSV et vous pourrez 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

Dans l'exemple 2, vous pourriez dresser une liste des utilisateurs que vous allez supprimer/désactiver dans un fichier CSV/excel et vous rendre à la direction avec cette liste.

J'espère que cela vous aidera !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X