Bonjour a vous,
voila ma problematique : retirer les comptes désactivés des groupes de diffusion.
j'arrive tres bien à parcourir tous les comptes de l'active directory, à filtrer ceux qui sont désactiver et à identifier ceux qui sont membres d'un groupe de diffusion.
Cependant je n'arrive pas à retirer cet utilisateur du groupe de diffusion, j'obtiens le message d'erreur suivant
ligne 52
caract 3
la propriete repertoire n'est pas presente dans le cache
code 8000500d
source: active directory
à titre de test (et de sauvegarde), j'enregistre dans un fichier excel les groupes à supprimer
merci pour votre aide
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.DisplayAlerts = FALSE
Set objWorkbook = objExcel.Workbooks.Add
Set objWorksheet = objWorkbook.Worksheets(1)
Const ADS_SCOPE_SUBTREE = 2
'Connection a l'Active Directory
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
'Requete d'utilisateurs dans l'Active Directory
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 3000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = "SELECT distinguishedName FROM 'LDAP://dc=xxx,dc=xxx,dc=fr' WHERE objectCategory='user'"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
'Ecriture des titres de colonnes Excel
objExcel.Cells(1, 1).Value = "CONTAINER"
objExcel.Cells(1, 2).Value = "GROUPE"
'Appel de la fonction pour tous les utilisateurs de l'AD et pointeur sur la 2eme ligne du document Excel
x = 2
Do Until objRecordSet.EOF
CleanDistrib(objRecordSet.Fields("distinguishedName").Value)
objRecordSet.MoveNext
Loop
Function CleanDistrib(utilisateur)
Const ADS_PROPERTY_DELETE = 4
Set objUser = GetObject("LDAP://"+utilisateur) 'selectionne un utilisateur
If objUser.AccountDisabled = True Then '1er filtrage : seulement les utilisateurs desactives
arrMemberOf = objUser.GetEx("memberOf") 'recuperation des groupes dont l'utilisateur est membre
intPrimaryGroupID = objUser.Get("primaryGroupID")
For Each Group in arrMemberOf
if InStr(group, "Destinataires") then '2eme filtrage : uniquement les groupes de diffusion
'Enregistrement dans excel du groupe de diffusion de l'utilisateur
objExcel.Cells(x, 1).Value = utilisateur
objExcel.Cells(x, 2).Value = group
x = x + 1
'Suppression de l'utilisateur du groupe de diffusion
set ObjGroup = GetObject ("LDAP://"&group)
ObjGroup.PutEx ADS_PROPERTY_DELETE, "member", Array(utilisateur)
ObjGroup.SetInfo
wscript.echo "groupe "+group+" supprimé pour "+utilisateur
end if
Next
End If
End Function
'mise en forme du document excel
Set objRange = objExcel.Range("A1")
objRange.Activate
Set objRange = objExcel.ActiveCell.EntireColumn
objRange.Autofit()
Set objRange = objExcel.Range("B1")
objRange.Activate
Set objRange = objExcel.ActiveCell.EntireColumn
objRange.Autofit()
'enregistrement du document excel
objWorkbook.SaveAs("C:\vbs\group.xls")
objExcel.Quit