Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Retrouver le chemin LDAP a partir du nom ou guid

7 réponses
Avatar
technicland
Bonjour
a l'aide du Distinguished Name on arrive a recuperer des infos sur un user
via des scripts
exemple :
Set objUser = GetObject(
"LDAP://CN=laurentb,ou=mtl,DC=technicland,DC=com" )
nom = objUser.Fullname

Ok par contre comment a partir du nom maintenant retrouver le distinguished
Name c'est a dire LDAP://CN=laurentb,ou=mtl,DC=technicland,DC=com ou alors
comment le recomposer a partir de fullname ou du guid peu importe.
J'ai bien essaye objUser.adspath mais ca me retourne pas le chemin complet
ce qui me pose le plus de probleme c'est de retrouver l'ou dans lequel ce
situe l'user.

Merci
PS: crosspost sur ad et scripting avec un fu2 sur AD
--
Laurent
www.technicland.com

7 réponses

Avatar
Fabricem [MS]
Bonjour

Voici comment faire en interrogant le GC

'======================================================================================================================== ' This script will find an object by its name in the global catalog(GC). It
will accept optional arguements to describe the
' objectCategory and objectClass of the object.
'========================================================================================================================

Option Explicit

Dim strFilter 'As String
Dim oConnection 'As ADODB.Connection
Dim oRecordSet 'As ADODB.RecordSet
Dim strQuery 'As String
Dim oNameSpace 'As IADsContainer
Dim oGC 'As IADs
Dim obj 'As Variant
Dim strGCPath 'As String

' Parse the command line and set the query filter
ParseCommandLine()

' Find the GC
Set oNameSpace = GetObject("GC:")
For Each obj in oNameSpace
set oGC = obj
Next
strGCPath = oGC.ADsPath 'cache the ADsPath to the GC
set oGC = Nothing
Set oNameSpace = Nothing

' Setup the ADO connection
Set oConnection = CreateObject("ADODB.Connection")
oConnection.Provider = "ADsDSOObject"
oConnection.Open "ADs Provider"

strQuery = "<" & strGCPath & ">;" & strFilter &
";distinguishedName,objectClass,name;subtree"

'Execute the query
set oRecordSet = oConnection.Execute(strQuery)
if oRecordSet.Eof then
WScript.Echo "No objects were found"
WScript.Quit(0)
Else
Dim vClasses 'As Variant
Dim strClass 'As String
'WScript.Echo "The following objects were found:"

' Iterate through the objects that match the filter
While Not oRecordset.Eof
vClasses = oRecordset.Fields("objectClass").Value
strClass = vClasses(UBound(vClasses))
wscript.echo oRecordset.Fields("distinguishedName").Value
'WScript.Echo "Name: " & oRecordset.Fields("name").Value & " Class: "
& strClass & " DN: " & oRecordset.Fields("distinguishedName").Value
oRecordset.MoveNext
Wend
End if

'Clean up
Set oRecordset = Nothing
Set oConnection = Nothing

WScript.Quit(0)

' End of Script
'========================================================================================================================== '==========================================================================================================================


'======================================================================================================================== ' The ParseCommandLine subroutine will build the query filter base on the
arguments passed to the script. The bNameFlag
' is used so that the name given can have spaces in it.
'======================================================================================================================== Sub ParseCommandLine()
Dim vArgs, Value, Equals, I
Dim bNameFlag 'As Boolean
Dim strName 'As String
Dim strObjectCategory 'As String
Dim strObjectClass 'As String


Set vArgs = WScript.Arguments
if VArgs.Count < 1 Then
DisplayUsage()
End if

bNameFlag = False
For I = 0 to vArgs.Count - 1
If Left( vArgs(I) , 1 ) = "/" Or Left( vArgs(I) , 1 ) = "-" Then

Value = ""
Equals = InStr( vArgs(I) , "=" )
If Equals = 0 Then Equals = InStr( vArgs(I) , ":" )
If Equals > 0 Then Value = Mid( vArgs(I) , Equals + 1 )

Select Case LCase( Mid( vArgs(I) , 2 , 1) )

Case "n" strName = Value
bNameFlag = True 'This will allow us to catch spaces
Case "o" strObjectCategory = Value
bNameFlag = False
Case "c" strObjectClass = Value
bNameFlag = False
Case Else DisplayUsage

End Select

Else 'no dash or slash; Check if we are giving a name
if bNameFlag Then
strName = strName & " " & vArgs(I)
else
DisplayUsage
end if
End if
Next


'Should be okay to build filter

If strName = "" Then
WScript.Echo "A name parameter must be given"
WScript.Quit(1)
Else
strFilter = "(&(name=" & strName & ")"
If Len(strObjectCategory) > 0 Then
strFilter = strFilter & "(objectCategory=" & strObjectCategory & ")"
End if
If Len(strObjectClass) > 0 Then
strFilter = strFilter & "(objectClass=" & strObjectClass & ")"
End if

strFilter = strFilter & ")" 'Close filter
End if
End Sub


'======================================================================================================================== ' The DisplayUsage subroutine will display how to use this script, the
objectCategory and objectClass arguments are optional.
'======================================================================================================================== Sub DisplayUsage()
WScript.Echo "Usage csript.exe " & WScript.ScriptName & vbLF & _
"-n=<name of the object you are looking for>" & vbLF & _
"[-o=<objectCategory of the object you are looking for>]" & vbLF & _
"[-c=<objectClass of the object you are looking for>]" & vbLF & vbLF &
_
"Examples : " & vbLF & _
WScript.ScriptName & " -n=My Contact" & vbLF & _
WScript.ScriptName & " -n=Computer1 -o=computer" & vbLF & _
WScript.ScriptName & " -n=James Smith -o=Person -c=user"
WScript.Quit(0)

End Sub



--
Fabrice Meillon
Architecte Infrastructure
Division Développeurs et Plate-Forme d'Entreprise
Microsoft France


"technicland" a écrit dans le
message de news:
Bonjour
a l'aide du Distinguished Name on arrive a recuperer des infos sur un user
via des scripts
exemple :
Set objUser = GetObject(
"LDAP://CN=laurentb,ou=mtl,DC=technicland,DC=com" )
nom = objUser.Fullname

Ok par contre comment a partir du nom maintenant retrouver le
distinguished Name c'est a dire
LDAP://CN=laurentb,ou=mtl,DC=technicland,DC=com ou alors comment le
recomposer a partir de fullname ou du guid peu importe.
J'ai bien essaye objUser.adspath mais ca me retourne pas le chemin complet
ce qui me pose le plus de probleme c'est de retrouver l'ou dans lequel ce
situe l'user.

Merci
PS: crosspost sur ad et scripting avec un fu2 sur AD
--
Laurent
www.technicland.com



Avatar
technicland
Fabricem [MS] nous a dit :
Bonjour

Voici comment faire en interrogant le GC


Bonjour
excellent c'est exactement ca qu il me fallait je pensait que ca serait plus
simple, sinon a priori vu les commentaires en anglais tu pourrais me filer
la source car vu la qualite du script c'est un bon filon ;-)

Merci
Laurent

Avatar
Fabricem [MS]
Bj

C'etait dans mes archives, de mémoire j'avais trouvé cela en interne, voir
je ne sais pas si le principe n'est pas disponible sur script center

cdlt
--
Fabrice

"technicland" a écrit dans le
message de news:
Fabricem [MS] nous a dit :
Bonjour

Voici comment faire en interrogant le GC


Bonjour
excellent c'est exactement ca qu il me fallait je pensait que ca serait
plus simple, sinon a priori vu les commentaires en anglais tu pourrais me
filer la source car vu la qualite du script c'est un bon filon ;-)

Merci
Laurent




Avatar
technicland
Fabricem [MS] nous a dit :
Bj

C'etait dans mes archives, de mémoire j'avais trouvé cela en interne,
voir je ne sais pas si le principe n'est pas disponible sur script
center


Salut Ok
Le script center je l'ai epluchais pourtant, ca doit etre en interne
effectivement car google parle pas plus sur ce script, merci en tout cas
c'est sympa
Laurent

Avatar
Sebastien Piche
je sait pas trop si c'est que tu cherche j'avoue que j'ai lue un peux en
diagonal mais regarde donc ce si

Set objSysInfo = CreateObject("ADSystemInfo")

msgbox ("nom et OU: " & objSysInfo.UserName &vbcrlf &_
"ordinateur: " & objSysInfo.ComputerName &vbcrlf& _
"Site: " & objSysInfo.SiteName &vbcrlf &_
"Domain: " & objSysInfo.DomainShortName &vbcrlf &_
"nom de DNS: " & objSysInfo.DomainDNSName &vbcrlf & _
"Forest DNS: " & objSysInfo.ForestDNSName &vbcrlf &_
"PDC: " & objSysInfo.PDCRoleOwner &vbcrlf &_
"Schema: " & objSysInfo.SchemaRoleOwner &vbcrlf& _
"native mode: " & objSysInfo.IsNativeMode &vbcrlf)

"technicland" a écrit dans le
message de news:
Bonjour
a l'aide du Distinguished Name on arrive a recuperer des infos sur un user
via des scripts
exemple :
Set objUser = GetObject(
"LDAP://CN=laurentb,ou=mtl,DC=technicland,DC=com" )
nom = objUser.Fullname

Ok par contre comment a partir du nom maintenant retrouver le
distinguished Name c'est a dire
LDAP://CN=laurentb,ou=mtl,DC=technicland,DC=com ou alors comment le
recomposer a partir de fullname ou du guid peu importe.
J'ai bien essaye objUser.adspath mais ca me retourne pas le chemin complet
ce qui me pose le plus de probleme c'est de retrouver l'ou dans lequel ce
situe l'user.

Merci
PS: crosspost sur ad et scripting avec un fu2 sur AD
--
Laurent
www.technicland.com



Avatar
technicland
Sebastien Piche nous a dit :
je sait pas trop si c'est que tu cherche j'avoue que j'ai lue un peux
en diagonal mais regarde donc ce si

Set objSysInfo = CreateObject("ADSystemInfo")


Salut
merci mais ADSystemInfo retrouve le distinguished name du user qui est logué
c'est pas ce que je voulais mais le script de Fabrice m a comblé.
Je te remercie quand meme
LAurent

Avatar
Fabricem [MS]
Bonjour

Pour info, on trouve aussi pas mal de chose dans msdn
cf
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ad/ad/example_code_for_using_the_global_catalog_to_find_users_in_a_forest.asp


et script center

http://www.microsoft.com/resources/documentation/windows/2000/server/scriptguide/en-us/sas_usr_bzqz.mspx

A+

Cdlt

--
Fabrice Meillon
Architecte Infrastructure
Division Développeurs et Plate-Forme d'Entreprise
Microsoft France


"technicland" a écrit dans le
message de news:
Fabricem [MS] nous a dit :
Bj

C'etait dans mes archives, de mémoire j'avais trouvé cela en interne,
voir je ne sais pas si le principe n'est pas disponible sur script
center


Salut Ok
Le script center je l'ai epluchais pourtant, ca doit etre en interne
effectivement car google parle pas plus sur ce script, merci en tout cas
c'est sympa
Laurent