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

lange521 16 Messages postés mercredi 19 mars 2008Date d'inscription 1 avril 2008 Dernière intervention - 19 mars 2008 à 08:23 - Dernière réponse : lange521 16 Messages postés mercredi 19 mars 2008Date d'inscription 1 avril 2008 Dernière intervention
- 1 avril 2008 à 12:37
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.
Afficher la suite 

26 réponses

Répondre au sujet
lange521 16 Messages postés mercredi 19 mars 2008Date d'inscription 1 avril 2008 Dernière intervention - 1 avril 2008 à 11:54
+3
Utile
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+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de lange521
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 19 mars 2008 à 08:41
0
Utile
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
Commenter la réponse de Renfield
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 19 mars 2008 à 09:05
0
Utile
tiens miss, des exemples..

http://support.microsoft.com/kb/323750/en-us
Commenter la réponse de Renfield
lange521 16 Messages postés mercredi 19 mars 2008Date d'inscription 1 avril 2008 Dernière intervention - 19 mars 2008 à 14:42
0
Utile
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 ?
Commenter la réponse de lange521
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 19 mars 2008 à 15:04
0
Utile
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
Commenter la réponse de Renfield
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 19 mars 2008 à 15:11
Commenter la réponse de Renfield
lange521 16 Messages postés mercredi 19 mars 2008Date d'inscription 1 avril 2008 Dernière intervention - 27 mars 2008 à 15:43
0
Utile
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
Commenter la réponse de lange521
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 27 mars 2008 à 15:49
0
Utile
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...
Commenter la réponse de Renfield
lange521 16 Messages postés mercredi 19 mars 2008Date d'inscription 1 avril 2008 Dernière intervention - 27 mars 2008 à 15:53
0
Utile
je n'ai pas tout compris à ta fonction
ca fait la meme chose que celle que j'ai trouvé?

ben je vais la tester
Commenter la réponse de lange521
lange521 16 Messages postés mercredi 19 mars 2008Date d'inscription 1 avril 2008 Dernière intervention - 27 mars 2008 à 15:58
0
Utile
C'est encore moi

vsUser c'est le DN, Le name, le CN, c'est quoi ?
Commenter la réponse de lange521
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 27 mars 2008 à 16:01
0
Utile
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)
Commenter la réponse de Renfield
lange521 16 Messages postés mercredi 19 mars 2008Date d'inscription 1 avril 2008 Dernière intervention - 27 mars 2008 à 16:07
0
Utile
ok
il me met type d'argument ByRef incompatible
je fais quoi alors?
Commenter la réponse de lange521
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 27 mars 2008 à 16:18
0
Utile
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
Commenter la réponse de Renfield
lange521 16 Messages postés mercredi 19 mars 2008Date d'inscription 1 avril 2008 Dernière intervention - 27 mars 2008 à 16:23
0
Utile
ca me fait plus d'erreur, mon programme marche mais ta fonction me retourne comme date 00:00:00, c pas normal?
Commenter la réponse de lange521
lange521 16 Messages postés mercredi 19 mars 2008Date d'inscription 1 avril 2008 Dernière intervention - 27 mars 2008 à 16:25
0
Utile
ben en fait je fais du vba
Commenter la réponse de lange521
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 27 mars 2008 à 16:30
0
Utile
regarde également

http://www.rlmueller.net/ADOSearchTips.htm
Commenter la réponse de Renfield
lange521 16 Messages postés mercredi 19 mars 2008Date d'inscription 1 avril 2008 Dernière intervention - 28 mars 2008 à 09:31
0
Utile
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.
Commenter la réponse de lange521
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 28 mars 2008 à 09:46
0
Utile
quel est ton code actuel ?
Commenter la réponse de Renfield
lange521 16 Messages postés mercredi 19 mars 2008Date d'inscription 1 avril 2008 Dernière intervention - 28 mars 2008 à 09:48
0
Utile
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.
Commenter la réponse de lange521
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 28 mars 2008 à 10:02
0
Utile
sure des noms que tu entres (Domaine et User) ?
Commenter la réponse de Renfield

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

envoie de mails à tous les utilisateurs d'active directory dont le mot de passe - page 2