Question Move compte AD et suppression des groupes

Plus d'informations
il y a 4 ans 11 mois #28666 par Galadan
Bonjour,

Je cherche à bouger les utilisateurs désactivés dans une OU spécifique et de supprimer de ces comptes certains groupes AD auxquels ils appartiennent. Le tout avec un petit rapport.

J'ai commencé par ça:

[code:1]#================================= Variables

$CSVfile = 'serveur'
$OUsearch = 'OU=Utilisateurs'
$OUdest = 'OU=Désactivé'
$iM = 0 # Compteur d'utilisateurs supprimés / reset à 0 en début de boucle pour le comptage
$TodayTime = Get-Date -UFormat \"%d-%m-%Y-%HH%m\"
$RapportTxt = 'c:\temp\' + $TodayTime + '_log_purge_AD_Users.txt'

#================================= En tête du rapport à générer

echo \"#==========================================\" >> $RapportTxt
echo \"# Report on \" $TodayTime >> $RapportTxt
echo \"#==========================================\" >> $RapportTxt
echo \"# List of Users desactivated and moved : \" >> $RapportTxt

#================================= Récuperation des comptes désactivés

Import-module ActiveDirectory
$UserToDel = Get-ADUser -filter {(Enabled -eq 'False')} -searchbase $OUsearch | ? { ($_.distinguishedname -notlike '*Désactivé*') } | export-csv $OUsearch -notypeinformation

#================================= Traitement de l'extract en CSV

$CSVImport = Import-Csv $OUsearch -Delimiter \",\"

ForEach ($User in $CSVImport){
$DistinguishedName = $($user.DistinguishedName)
$Name = $($user.Name)
echo $Name >> $RapportTxt

#================================= Supression des groupe de licence



#================================= Déplacement au fil de l'eau

Move-ADObject -identity $DistinguishedName -targetpath $OUdest
$iM++ # incrémente le compteur
}

#================================= Fin du rapport à générer

echo \"#==========================================\" >> $RapportTxt
echo $iM \"User have been desactivate and moved\" >> $RapportTxt
echo \"to OU 'Désactivé' \" >> $RapportTxt
echo \"#==========================================\" >> $RapportTxt

#================================= Envoi par email du rapport

$MailTo = \"\"
$MailCC = \"\"
$MailFrom = \"Utilisateurs désactivés de l'AD\"
$MailSmtp = \"smtp-gateway\"
Send-MailMessage -From $MailFrom -To $MailTo -CC $MailCC -Subject \"AD - Purge des Users\" -Body \"Voir le fichier de log en PJ\" -Attachment $RapportTxt -SmtpServer $MailSmtp

#================================= Supression du rapport

Remove-Item -Path $RapportTxt -force[/code:1]

Il me manque la partie suppression des groupes, sachant qu'il y a plusieurs groupes.
Le code fonctionne après, il est surement perfectible...

Si vous avez des idées je suis preneur!

Merci d'avance.

Message édité par: Arnaud, à: 11/04/19 13:07<br><br>Message édité par: Galadan, à: 23/04/19 08:41

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 4 ans 11 mois #28671 par Sinjk
Hello,

Comment determines-tu les groupes à supprimer ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 4 ans 11 mois #28680 par Galadan
Bonjour, justement je ne sais pas trop.
J'aimerais éviter l'utilisation d'un fichier externe.
Sachant que les groupes en questions commencent de la même façon.

Peut-on éviter également l'utilisation d'un fichier comme au début du script?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 4 ans 11 mois #28683 par Sinjk
Si tu veux éviter l'utilisation d'un fichier externe tu dois faire ton filtrage directement depuis ta variable $UserToDel

[code:1]

$OUsearch = 'OU=Utilisateurs'
$UserToDel = Get-ADUser -filter {(Enabled -eq 'False')} -searchbase $OUSearch -Properties * | ? { ($_.distinguishedname -notlike '*Désactivé*') }


foreach($user in $UserToDel){

$DistinguishedName = $user.DistinguishedName
$Name = $user.Name
$Groups= $user.memberof
Move-ADObject -identity $DistinguishedName -targetpath $OUdest

$iM++ # incrémente le compteur


}


[/code:1]

La variable $Groups va te permettre de voir les groupes auxquels les users appartiennent, à toi de définir lesquels sont à supprimer !

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 4 ans 11 mois #28684 par Galadan
Comme cela:

[code:1]$UserToDel = Get-ADUser -filter {(Enabled -eq 'False')} -searchbase $OUSearch -Properties * | ? { ($_.distinguishedname -notlike '*Désactivé*') }

foreach($user in $UserToDel){

$DistinguishedName = $user.DistinguishedName
$Name = $user.Name
$Groups= $user.memberof
Move-ADObject -identity $DistinguishedName -targetpath $OUdest
Remove-ADGroupMember -Identity $DistinguishedName -Member $groups -Confirm:$false
$iM++ # incrémente le compteur

}[/code:1]

Avec:

[code:1]$groups = 'GRP_LIC_*','GDL_*'[/code:1]<br><br>Message édité par: Galadan, à: 8/04/19 10:27

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 4 ans 11 mois #28685 par Sinjk
Bonjour,

Attention tu confonds les paramètres Identity et Members

[code:1]
$groups = 'GRP_LIC_*','GDL_*'
Remove-ADGroupMember -Identity $groups -Member $DistinguishedName -Confirm:$false
[/code:1]

Dans ce cas où tu connais directement les groupes je pense que tu n'as plus besoin du $user.memberof

Essaye déjà comme ça et tu verras.

Bon courage

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.086 secondes
Propulsé par Kunena