Envoie de mails à tous les utilisateurs d'active directory dont le mot de passe [Résolu]

Signaler
Messages postés
16
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008
-
Messages postés
16
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008
-
Bonjour à tous,

Voilà j'ai un petit soucis.
On me demande de créer un programme sous Excel permettant à l'aide d'un bouton mais aussi d'une variable saisi dans un champ, qui est le nombre de semaines avant expiration, d'envoyer des mails à tous les utilisateurs d'active directory.

Mais je n'y connais rien à Active directory et à comment se connecter à active directory en vba, mais aussi comment accéder aux utilisateurs et récupérer leur informations.

Je sais pas si ce que je dis est compréhensible mais merci d'avance à ceux qui ont une réponse.

26 réponses

Messages postés
16
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008

Bonjour,

Merci pour toute l'aide que tu m'a apporté.
J'ai enfin trouvé une réponse à mon problème de date d'expiration et mon programme fonctionne super bien.

J'ai trouvé la solution sur ce site : http://www.freevbcode.com/ShowCode.Asp?ID=710

Voila.
a+
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
faut faire une (des) requetes LDAP

cherches justement LDAP
tu trouveras des exemples.

a noter que la syntaxe de ces requetes est décrites sur MSDN
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
Messages postés
16
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008

merci pour l'aide
mais il y a un truc que je comprend pas, meme en lisant les explications j'y arrive pas c koi : cn  et ou ?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
Je te cherche ca dans la doc.

reste que le code que je t'ai indiqué peut être remanié ainsi :


Private Property Get PasswordExpirationDate(ByRef vsDomain As String, ByRef vsUser As String) As Date
Dim oUser As Object
On Local Error Resume Next
Set oUser = GetObject("WinNT://" & vsDomain & "/" & vsUser & ",user")
If Not Nothing Is oUser Then
PasswordExpirationDate = oUser.PasswordExpirationDate
End If
End Property
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
Messages postés
16
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008

Bonjour
j'ai trouvé un bout de code sur internet permettant de savoir quand arrive à expiration le mot de passe d'un utilisateur, mais j'ai un problème lorsque je l'éxécute, il me met une erreur d'automation.

Sub bouton12_Quandclic()

'========================================
' First, get the domain policy.
'========================================
'Dim oDomain As IADsContainer
'Dim oUser As IADsUser
Dim maxPwdAge As LargeInteger

'========================================
' Declaring numDays as Currency, due to a
' large number calculation.
'========================================
Dim numDays As Currency

Dim sQuery As String

Set oRoot = GetObject("LDAP://RootDSE")
sDomain = oRoot.Get("defaultNamingContext")
Set conn = CreateObject("ADODB.Connection")
Set comm = CreateObject("ADODB.Command")
conn.Provider = "ADsDSOObject"
conn.Open "ADs Provider"
Set comm.ActiveConnection = conn

strDomainDN = oRoot.Get("defaultNamingContext")

Set oDomainDN = GetObject("LDAP://" & strDomainDN)

sBase = "<" & oDomainDN.ADsPath & ">"

'strUserDN = strDomainDN & "/CN=Administrateur,CN=User,DC=cermex,DC=fr"

sFilter = "(&(objectCategory=person)(objectClass=user)(name=julie))"

sAttribs = "adsPath"
sDepth = "subTree"

sQuery = strDomainDN & ";" & sFilter & ";" & sAttribs & ";" & sDepth
comm.CommandText = sQuery
Set strUserDN = conn.Execute(sQuery)

Set oDomain = GetObject("LDAP://" & strDomainDN)
Set maxPwdAge = oDomain.Get("maxPwdAge")

'========================================
' Calculate the number of days that are
' held in this value. 'numDays ((maxPwdAge.HighPart * 2 ^ 32) + _
maxPwdAge.LowPart) / -864000000000@
Debug.Print "Maximum Password Age: " & numDays

'========================================
' Determine the last time that the user
' changed his or her password. 'Set oUser GetObject("LDAP://" & strUserDN) ' erreur sur cette ligne, erreur d automation

'========================================
' Add the number of days to the last time
' the password was set. 'whenPasswordExpires DateAdd("d", numDays, oUser.PasswordLastChanged)

Debug.Print "Password Last Changed: " & oUser.PasswordLastChanged
Debug.Print "Password Expires On: " & whenPasswordExpires

'========================================
' Clean up. 'Set oUser Nothing
Set maxPwdAge = Nothing
Set oDomain = Nothing

End Sub

si quelqu'un pouvait m'aider
merci d'avance
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
Ma fonction ne te plait donc pas ?

Private Property Get PasswordExpirationDate(ByRef vsDomain As String, ByRef vsUser As String) As Date
Dim oUser As Object
On Local Error Resume Next
Set oUser = GetObject("WinNT://" & vsDomain & "/" & vsUser & ",user")
If Not Nothing Is oUser Then
PasswordExpirationDate = oUser.PasswordExpirationDate
End If
End Property

Tout ce qu'il te reste a faire, c'est de pouvoir lister les user, afin de tester l'expiry de chacun...
Messages postés
16
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008

je n'ai pas tout compris à ta fonction
ca fait la meme chose que celle que j'ai trouvé?

ben je vais la tester
Messages postés
16
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008

C'est encore moi

vsUser c'est le DN, Le name, le CN, c'est quoi ?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
ma fonction permet de récupérer, comme son nom l'indique, la date d'expiration du mot de passe de l'utilisateur vsUser sur le Domaine vsDomain...


concernant ta deuxième question, si tu avais regardé le lien que je t'ai donné la semaine passée, tu aurais pu y lire:

Object Class | Naming attribute
---------------+------------------------
user | cn (Common Name)
group | cn (Common Name)
computer | cn (Common Name)
container | cn (Common Name)
organizational unit | ou (Organizational Unit)
domain | dc (Domain Component)
Messages postés
16
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008

ok
il me met type d'argument ByRef incompatible
je fais quoi alors?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
doit venir du fait que tu sembles faire du VBS (je t'ai filé du VB6)

ca donnerait en gros:

Private Property Get PasswordExpirationDate(vsDomain, vsUser)
Dim oUser
On Local Error Resume Next
Set oUser = GetObject("WinNT://" & vsDomain & "/" & vsUser & ",user")
If Not Nothing Is oUser Then
PasswordExpirationDate = oUser.PasswordExpirationDate
End If
End Property
Messages postés
16
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008

ca me fait plus d'erreur, mon programme marche mais ta fonction me retourne comme date 00:00:00, c pas normal?
Messages postés
16
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008

ben en fait je fais du vba
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
Messages postés
16
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008

salut
c'est encore moi.

bon j'ai essayé pleins de trucs pour avoir l'expiration du mot de passe mais j'y arrive pas, soit le champs est vide soit j'ai 00:00:00 comme valeur. Il doit y avoir un problème, les champs de l'ad nécessaire ne sont peut être pas renseignés ou je ne c quoi d'autre.

Qu'en pensez vous ?
Si quelqu'un a une réponse merci.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
quel est ton code actuel ?
Messages postés
16
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008

mon code pour récupérer l'expiration de la date, c ta fonction qui me retourne 00:00:00
mais j'ai déjà essayé une autre fonction mais elle marche pas non plus, pwdLastSet est null.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
sure des noms que tu entres (Domaine et User) ?