Bonjour,
J'essaye de faire une requète par VBS qui me ramènerait le contenu des champs Active Directory : prénom, nom, login,
email, description et OU d'appartenance pour un login (antérieur à Windows 2000) d'utilisateur donné.
A quelques rares cas près, le champ description donne lieu à une erreur:
Erreur 54
Type incompatible
Code 800A000D
Le champ "description" est pourtant rempli, soit logiciellement (script de création automatique), soit manuellement
(création du compte par la console inclue dans windows serveur 2003).
Quelqu'un peut-il m'expliquer l'erreur que je fais ?
Le programme:
Option explicit
'On Error Resume Next
Dim monUser
Dim objDSE
Dim oConnection
Dim oRecordSet
Dim sFilter
Dim champs
Dim profondeur
Dim Requete
Dim nbRecord
Dim CRLF
Dim partie
Dim nom
Dim prenom
Dim login
Dim OU
Dim UserDName
Dim UserPName
Dim Email
Dim Description
CRLF = chr(13) 'saut de ligne
monUser = "dddddd"
' Connexion
Set objDSE = GetObject("LDAP://rootDSE")
set oConnection = CreateObject("ADODB.Connection")
oConnection.Provider = "ADsDSOObject"
oConnection.Open "ADs Provider"
' filtre sur le login utilisateur
' -------------------------------
sFilter = "(&(objectclass=user)(samaccountname=" & monUser & "))"
' champ(s) demandé(s)
' -------------------
champs = ";givenName,SN,distinguishedName,userPrincipalName,mail,description"
' Niveau de profondeur de recherche dans les OU
' ---------------------------------------------
profondeur = ";subtree"
' Construction de la requète
' --------------------------
Requete = "<LDAP://" & objDSE.Get("defaultNamingContext") & ">;" & sFilter & champs & profondeur
WScript.Echo Requete
' execution de la requete
' -----------------------
Set oRecordSet = oConnection.Execute(Requete)
nbRecord = oRecordSet.RecordCount
If nbRecord = 0 Then
wScript.Echo "Planté !!!" & CRLF & "Utilisateur "& monUser & " non trouvé"
oConnection.Close
WScript.Quit
else
WScript.Echo "Nombre d'enregistrement = " & nbRecord
End if
prenom = oRecordset.Fields("givenName").Value
nom = oRecordset.Fields("SN").Value
UserDName = oRecordset.Fields("distinguishedName").Value
UserPName = oRecordset.Fields("userPrincipalName").Value
Email = oRecordset.Fields("mail").Value
Description = oRecordset.Fields("Description").Value
' extraction nom OU la plus basse
partie = split(UserDName,",")
OU = Right(partie(1),Len(partie(1))-3)
' extraction login user (a partir windows 2000)
partie = split(UserPName,"@")
login = partie(0)
' Affichage des infos recuperees
' ------------------------------
WScript.Echo "prenom: " & prenom _
& CRLF & "nom: " & nom _
& CRLF & "login: " & login _
& CRLF & "Email: " & Email _
& CRLF & "OU: " & OU _
& CRLF & "Description: " & Description
oConnection.Close
WScript.QuitConfiguration: Windows XP
VBS