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

probléme de connexion à L' AD en vbs

11 réponses
Avatar
dareman
Bonjour,
tout d'abord je tient à m'excuser pour mon précédent message posté sur ce forum ou mes réponses n'ont jamais été publiées je ne sais pourquoi, mais grâce à l'aide de certain j'ai pu me débrouiller ^^

je poste ce message, car j'ai créer un script qui "permet" de récupérer toutes les OU de l'AD et de les stockés dans une combobox le tout en hta.
voici une partie du script:

'----------------------------------------------------------------------------connexion à l'AD en mode objet
Set adoConnection = CreateObject("ADODB.Connection")' protocol pour la conexion a l'AD en programation objet
'sert à chercher le dommaine de tout les utilisateurs
Set adoCommand = CreateObject("ADODB.Command")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
Set adoCommand.ActiveConnection = adoConnection
'-------------------------------------------------------------------------
Set objRootDSE = GetObject("LDAP://rootDSE") 'cherche le dc en mode root
strFilter = "(&(objectClass=OrganizationUnit))"
strQuery = "<LDAP://" & objRootDSE.Get("defaultNamingContext") & ">;" & strFilter

adoCommand.CommandText = strQuery
Set adoRecordset = adoCommand.Execute //// voila la ligne qui plante
adoCommand.MoveFirst

si quelqu'un as une idée aussi pour stocké le résultat dans une combobox je suis preneur.

je remercie d'avance toute personne qui prêtera attention à mon probléme

10 réponses

1 2
Avatar
Lognoul Marc [MVP]
Bonjour,

Je ne sais pas si le code ci-dessous est imcomplet pour préserver la
confidentialité mais il est certain qu'il contient des erreurs et des
manquements.
Je vous propose d'utiliser celui-ci en lieu et place:

Set objRootDSE = GetObject("LDAP://rootDSE")

strBase = "<LDAP://" & objRootDSE.Get("defaultNamingContext") & ">;"
strFilter = "(objectCategory=OrganizationalUnit);"
strAttrs = "distinguishedName;"
strScope = "SubTree"

set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
objRS.MoveFirst
Do While Not objRS.EOF
Wscript.Echo objRS.Fields(0).Value
objRS.MoveNext
Loop

QQ commentaires:
- Tjrs bien structurer le query LDAP
- Dans la section"filter", utiliser de préférence des attributs indexé, ex:
objectCategory au lieu de objectClass ET vérifier la syntaxe:
OrganizationalUnit et non OrganizationUnit
- Veillez à spécifier le ou les attributs à récupérer
- Spécifier le scope (ou la profindeur" de la recherche. en partant du root,
SubTree me parait nécessaire
- Sauf absolument nécessaire, ne pas utiliser d'objec additionnels (type
ADOCommand...) -> Keep it Simple

En ce qui concerne la construction d'un combo-box pour un HTA, vous pouvez
insérer le contenu en Dynamic HTML
Prévoir un <div> dans votre HTA, appellez-le MaComboBox par ex.

strComboBox = "<Select id=""Combo"" name=""Combo"">" & VbCrLf
Ensuite, dans la boucle do/loop
strComboBox = strComboBox & "<option value=""" & objRS.Fields(0).Value &
""">" & objRS.Fields(0).Value & "</option>" & VbCrLf

Enfin, fermez le tag:
strComboBox = strComboBox & "</select>"

MaComboBox.innerHTML = strComboBox


N'oubliez pas de vider le contenu avant de le régénérer...

Ouf, ça fait du bien de refaire un peu d'ADSI dans ce monde .Net ;)

--
Marc [MCSE, MCTS, MVP]
[Heureux celui qui a pu pénétrer les causes secrètes des choses]
[Blog: http://www.marc-antho-etc.net/blog/]

"dareman" wrote in message
news:
Bonjour,
tout d'abord je tient à m'excuser pour mon précédent message posté sur ce
forum
ou mes réponses n'ont jamais été publiées je ne sais pourquoi, mais grâce
à
l'aide de certain j'ai pu me débrouiller ^^

je poste ce message, car j'ai créer un script qui "permet" de récupérer
toutes
les OU de l'AD et de les stockés dans une combobox le tout en hta.
voici une partie du script:

'----------------------------------------------------------------------------connexion
à l'AD en mode objet
Set adoConnection = CreateObject("ADODB.Connection")' protocol pour la
conexion
a l'AD en programation objet
'sert à chercher le dommaine de tout les utilisateurs
Set adoCommand = CreateObject("ADODB.Command")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
Set adoCommand.ActiveConnection = adoConnection
'-------------------------------------------------------------------------
Set objRootDSE = GetObject("LDAP://rootDSE") 'cherche le dc en mode root
strFilter = "(&(objectClass=OrganizationUnit))"
strQuery = "<LDAP://" & objRootDSE.Get("defaultNamingContext") & ">;" &
strFilter

adoCommand.CommandText = strQuery
Set adoRecordset = adoCommand.Execute //// voila la ligne qui plante
adoCommand.MoveFirst

si quelqu'un as une idée aussi pour stocké le résultat dans une combobox
je
suis preneur.

je remercie d'avance toute personne qui prêtera attention à mon probléme


Avatar
dareman
dareman a écrit le 06/05/2009 à 11h12 :
Bonjour,
tout d'abord je tient à m'excuser pour mon précédent
message posté sur ce forum ou mes réponses n'ont jamais
été publiées je ne sais pourquoi, mais grâce
à l'aide de certain j'ai pu me débrouiller ^^

je poste ce message, car j'ai créer un script qui "permet" de
récupérer toutes les OU de l'AD et de les stockés dans une
combobox le tout en hta.
voici une partie du script:

'----------------------------------------------------------------------------connexion
à l'AD en mode objet
Set adoConnection = CreateObject("ADODB.Connection")' protocol pour
la conexion a l'AD en programation objet
'sert à chercher le dommaine de tout les utilisateurs
Set adoCommand = CreateObject("ADODB.Command")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
Set adoCommand.ActiveConnection = adoConnection
'-------------------------------------------------------------------------
Set objRootDSE = GetObject("LDAP://rootDSE") 'cherche le dc en mode
root
strFilter = "(&(objectClass=OrganizationUnit))"
strQuery = "<LDAP://" &
objRootDSE.Get("defaultNamingContext") & ">;" &
strFilter

adoCommand.CommandText = strQuery
Set adoRecordset = adoCommand.Execute //// voila la ligne qui plante
adoCommand.MoveFirst

si quelqu'un as une idée aussi pour stocké le résultat
dans une combobox je suis preneur.

je remercie d'avance toute personne qui prêtera attention à mon
probléme


merci pour cette réponse,
je débute au niveau ldap alors c'est vrai que mon code est confu et comporte des erreurs ^^, surtout que je n'est pas compris comment fonctionne chaque fonction à laquelle je fait apel.

je test le code et je vous tient au courant pour savoir si je m'en sort ou pas ^^
Avatar
Gilles LAURENT [MVP]
"dareman" a écrit dans le message de
news:
| Bonjour,

Bonjour,

| je poste ce message, car j'ai créer un script qui "permet" de
| récupérer toutes les OU de l'AD et de les stockés dans une combobox
| le tout en hta.
[...]

Une autre alternative pour concevoir ce genre d'outil est de s'appuyer
sur le Framework .Net soit Windows PowerShell pour le code et Windows
Forms pour l'interface graphique. A titre d'exemple, le code PowerShell
V2 ci-dessous permet d'afficher dans la console le chemin LDAP complet
de toutes les OU définies dans l'annuaire Active Directory du domaine
courant :

--- CodeSnippet.ps1 ---
$searcher=[adsisearcher]"(objectCategory=OrganizationalUnit)"
$searcher.FindAll() | % { $_.Path }
--- CodeSnippet.ps1 ---

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
Lognoul Marc [MVP]
Bonjour Gilles,

Je profite de ce post pour te poser une question partiellement liée: A ma
connaissance, il n'y a pas de support pour le PoSh en HTA. Connais tu une
manière détournée (mais pratique) pour offrir cette possibilité.
Côté serveur, j'utilise ceci: http://powershelltoys.com/powershellasp.aspx
et côté client les PowerGadgets mais j'aimerais conserver la technologie HTA
dans certains cas.

--
Marc [MCSE, MCTS, MVP]
[Heureux celui qui a pu pénétrer les causes secrètes des choses]
[Blog: http://www.marc-antho-etc.net/blog/]


"Gilles LAURENT [MVP]" wrote in message
news:
"dareman" a écrit dans le message de
news:
| Bonjour,

Bonjour,

| je poste ce message, car j'ai créer un script qui "permet" de
| récupérer toutes les OU de l'AD et de les stockés dans une combobox
| le tout en hta.
[...]

Une autre alternative pour concevoir ce genre d'outil est de s'appuyer
sur le Framework .Net soit Windows PowerShell pour le code et Windows
Forms pour l'interface graphique. A titre d'exemple, le code PowerShell
V2 ci-dessous permet d'afficher dans la console le chemin LDAP complet
de toutes les OU définies dans l'annuaire Active Directory du domaine
courant :

--- CodeSnippet.ps1 ---
$searcher=[adsisearcher]"(objectCategory=OrganizationalUnit)"
$searcher.FindAll() | % { $_.Path }
--- CodeSnippet.ps1 ---

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr




Avatar
dareman
dareman a écrit le 06/05/2009 à 11h12 :
Bonjour,
tout d'abord je tient à m'excuser pour mon précédent
message posté sur ce forum ou mes réponses n'ont jamais
été publiées je ne sais pourquoi, mais grâce
à l'aide de certain j'ai pu me débrouiller ^^

je poste ce message, car j'ai créer un script qui "permet" de
récupérer toutes les OU de l'AD et de les stockés dans une
combobox le tout en hta.
voici une partie du script:

'----------------------------------------------------------------------------connexion
à l'AD en mode objet
Set adoConnection = CreateObject("ADODB.Connection")' protocol pour
la conexion a l'AD en programation objet
'sert à chercher le dommaine de tout les utilisateurs
Set adoCommand = CreateObject("ADODB.Command")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
Set adoCommand.ActiveConnection = adoConnection
'-------------------------------------------------------------------------
Set objRootDSE = GetObject("LDAP://rootDSE") 'cherche le dc en mode
root
strFilter = "(&(objectClass=OrganizationUnit))"
strQuery = "<LDAP://" &
objRootDSE.Get("defaultNamingContext") & ">;" &
strFilter

adoCommand.CommandText = strQuery
Set adoRecordset = adoCommand.Execute //// voila la ligne qui plante
adoCommand.MoveFirst

si quelqu'un as une idée aussi pour stocké le résultat
dans une combobox je suis preneur.

je remercie d'avance toute personne qui prêtera attention à mon
probléme


bonjour,
tout d'abord merci marc pour ton code, il m'a bien dépanné
merci à toi aussi laurent, mais pour mon stage il m'a été demandé de tout faire en vbs ce qui exclu le Framework .Net, quand à ta question je ne suis hélas pas assez callé en la matiére je laisse répondre marc si il peut t'aider
merci à tout les 2, je vous souhaite de passer une bonne journée
Avatar
Gilles LAURENT [MVP]
Bonjour Marc,

En effet, il n'est pas possible d'encapsuler du script Powershell au
sein d'un fichier HTA. Une solution de contournement consiste à piloter
le DOM d'une instance Internet Explorer. Pour les Windows Forms, il y a
l'excellent produit Admin Script Editor :
http://www.adminscripteditor.com/. Celui-ci embarque un éditeur de Form
PowerShell qui facilite grandement les choses ;-)

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr

| Bonjour Gilles,
|
| Je profite de ce post pour te poser une question partiellement liée:
| A ma connaissance, il n'y a pas de support pour le PoSh en HTA.
| Connais tu une manière détournée (mais pratique) pour offrir cette
| possibilité.
| Côté serveur, j'utilise ceci:
| http://powershelltoys.com/powershellasp.aspx et côté client les
| PowerGadgets mais j'aimerais conserver la technologie HTA dans
| certains cas.
|
|
| "Gilles LAURENT [MVP]" wrote in message
| news:
|| "dareman" a écrit dans le message de
|| news:
||| Bonjour,
||
|| Bonjour,
||
||| je poste ce message, car j'ai créer un script qui "permet" de
||| récupérer toutes les OU de l'AD et de les stockés dans une combobox
||| le tout en hta.
|| [...]
||
|| Une autre alternative pour concevoir ce genre d'outil est de
|| s'appuyer sur le Framework .Net soit Windows PowerShell pour le code
|| et Windows Forms pour l'interface graphique. A titre d'exemple, le
|| code PowerShell V2 ci-dessous permet d'afficher dans la console le
|| chemin LDAP complet de toutes les OU définies dans l'annuaire Active
|| Directory du domaine courant :
||
|| --- CodeSnippet.ps1 ---
|| $searcher=[adsisearcher]"(objectCategory=OrganizationalUnit)"
|| $searcher.FindAll() | % { $_.Path }
|| --- CodeSnippet.ps1 ---
||
|| --
|| Gilles LAURENT
|| MVP Windows Server - Admin Frameworks
|| http://glsft.free.fr
Avatar
Lognoul Marc [MVP]
Gilles,

Merci pour ces infos.
Je n'aime pas trop instancier une application IE (restrictions de sécurité,
manque de responsiveness...), je vais donc tester la seconde proposition.

--
Marc [MCSE, MCTS, MVP]
[Heureux celui qui a pu pénétrer les causes secrètes des choses]
[Blog: http://www.marc-antho-etc.net/blog/]





"Gilles LAURENT [MVP]" wrote in message
news:O3F#
Bonjour Marc,

En effet, il n'est pas possible d'encapsuler du script Powershell au
sein d'un fichier HTA. Une solution de contournement consiste à piloter
le DOM d'une instance Internet Explorer. Pour les Windows Forms, il y a
l'excellent produit Admin Script Editor :
http://www.adminscripteditor.com/. Celui-ci embarque un éditeur de Form
PowerShell qui facilite grandement les choses ;-)

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr

| Bonjour Gilles,
|
| Je profite de ce post pour te poser une question partiellement liée:
| A ma connaissance, il n'y a pas de support pour le PoSh en HTA.
| Connais tu une manière détournée (mais pratique) pour offrir cette
| possibilité.
| Côté serveur, j'utilise ceci:
| http://powershelltoys.com/powershellasp.aspx et côté client les
| PowerGadgets mais j'aimerais conserver la technologie HTA dans
| certains cas.
|
|
| "Gilles LAURENT [MVP]" wrote in message
| news:
|| "dareman" a écrit dans le message de
|| news:
||| Bonjour,
||
|| Bonjour,
||
||| je poste ce message, car j'ai créer un script qui "permet" de
||| récupérer toutes les OU de l'AD et de les stockés dans une combobox
||| le tout en hta.
|| [...]
||
|| Une autre alternative pour concevoir ce genre d'outil est de
|| s'appuyer sur le Framework .Net soit Windows PowerShell pour le code
|| et Windows Forms pour l'interface graphique. A titre d'exemple, le
|| code PowerShell V2 ci-dessous permet d'afficher dans la console le
|| chemin LDAP complet de toutes les OU définies dans l'annuaire Active
|| Directory du domaine courant :
||
|| --- CodeSnippet.ps1 ---
|| $searcher=[adsisearcher]"(objectCategory=OrganizationalUnit)"
|| $searcher.FindAll() | % { $_.Path }
|| --- CodeSnippet.ps1 ---
||
|| --
|| Gilles LAURENT
|| MVP Windows Server - Admin Frameworks
|| http://glsft.free.fr




Avatar
Jonathan BISMUTH
Bonjour Gilles,

je me joins aux remerciements de Marc! Je ne connaissais pas non plus ASE et
suppose qu'il me fera gagner un certain temps dans ma navigation chaotique
autours des Windows Forms

--
Jonathan BISMUTH
MVP Windows Server - Directory Services
MCSE 2000, Transcript (ID: 691839, code: MCSE2000)
http://blog.portail-mcse.net

"Gilles LAURENT [MVP]" a écrit dans le message de news:
O3F%
Bonjour Marc,

En effet, il n'est pas possible d'encapsuler du script Powershell au
sein d'un fichier HTA. Une solution de contournement consiste à piloter
le DOM d'une instance Internet Explorer. Pour les Windows Forms, il y a
l'excellent produit Admin Script Editor :
http://www.adminscripteditor.com/. Celui-ci embarque un éditeur de Form
PowerShell qui facilite grandement les choses ;-)

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr

| Bonjour Gilles,
|
| Je profite de ce post pour te poser une question partiellement liée:
| A ma connaissance, il n'y a pas de support pour le PoSh en HTA.
| Connais tu une manière détournée (mais pratique) pour offrir cette
| possibilité.
| Côté serveur, j'utilise ceci:
| http://powershelltoys.com/powershellasp.aspx et côté client les
| PowerGadgets mais j'aimerais conserver la technologie HTA dans
| certains cas.
|
|
| "Gilles LAURENT [MVP]" wrote in message
| news:
|| "dareman" a écrit dans le message de
|| news:
||| Bonjour,
||
|| Bonjour,
||
||| je poste ce message, car j'ai créer un script qui "permet" de
||| récupérer toutes les OU de l'AD et de les stockés dans une combobox
||| le tout en hta.
|| [...]
||
|| Une autre alternative pour concevoir ce genre d'outil est de
|| s'appuyer sur le Framework .Net soit Windows PowerShell pour le code
|| et Windows Forms pour l'interface graphique. A titre d'exemple, le
|| code PowerShell V2 ci-dessous permet d'afficher dans la console le
|| chemin LDAP complet de toutes les OU définies dans l'annuaire Active
|| Directory du domaine courant :
||
|| --- CodeSnippet.ps1 ---
|| $searcher=[adsisearcher]"(objectCategory=OrganizationalUnit)"
|| $searcher.FindAll() | % { $_.Path }
|| --- CodeSnippet.ps1 ---
||
|| --
|| Gilles LAURENT
|| MVP Windows Server - Admin Frameworks
|| http://glsft.free.fr




Avatar
Gilles LAURENT [MVP]
Jonathan, Marc,

Merci pour ce retour. Je pense que vous allez vraiment apprécier ce
produit d'une part pour sa facilité de prise en main et d'autre part
pour le code généré très bien structuré. Pour une application graphique,
il me semble nécessaire de masquer la console PowerShell. Plusieurs
solutions sont disponibles toutefois je vous conseille celle-ci :
HStart: http://www.ntwind.com/software/utilities/hstart.html

Note: PowerShell V2 CTP3 expose maintemant l'argument "-WindowStyle" qui
permet de masquer de manière native la console PowerShell lors de
l'exécution d'un script.

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
dareman
dareman a écrit le 06/05/2009 à 11h12 :
Bonjour,
tout d'abord je tient à m'excuser pour mon précédent
message posté sur ce forum ou mes réponses n'ont jamais
été publiées je ne sais pourquoi, mais grâce
à l'aide de certain j'ai pu me débrouiller ^^

je poste ce message, car j'ai créer un script qui "permet" de
récupérer toutes les OU de l'AD et de les stockés dans une
combobox le tout en hta.
voici une partie du script:

'----------------------------------------------------------------------------connexion
à l'AD en mode objet
Set adoConnection = CreateObject("ADODB.Connection")' protocol pour
la conexion a l'AD en programation objet
'sert à chercher le dommaine de tout les utilisateurs
Set adoCommand = CreateObject("ADODB.Command")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
Set adoCommand.ActiveConnection = adoConnection
'-------------------------------------------------------------------------
Set objRootDSE = GetObject("LDAP://rootDSE") 'cherche le dc en mode
root
strFilter = "(&(objectClass=OrganizationUnit))"
strQuery = "<LDAP://" &
objRootDSE.Get("defaultNamingContext") & ">;" &
strFilter

adoCommand.CommandText = strQuery
Set adoRecordset = adoCommand.Execute //// voila la ligne qui plante
adoCommand.MoveFirst

si quelqu'un as une idée aussi pour stocké le résultat
dans une combobox je suis preneur.

je remercie d'avance toute personne qui prêtera attention à mon
probléme


bonour,
merci pour l'apli, je ne peut hélas pas la tester pendant mon stage car je ne posséde pas les droits nécessaires, mais je la testerai chez moi ^^
si non désolé d'insister mais je suis de nouveau confronté à un problème.
j'arrive donc à récupérer la liste des OU que je stock dans un combobox, une fois une OU selectionée, le code suivant ce lance, ce dernier doit récupérer tout les utilisateurs présent dans cette OU:

Sub combo_onchange ' quand une OU est selectionné dans la combobox
strBase = "<LDAP://" & combo.value & "," & objRootDSE.Get("defaultNamingContext") & ">;" ' pas 'de probleme avec cette ligne
strFilter = "(objectCategory=user);" ' pour selectioner les utilisateurs d'une OU
strFilter2 = "givenName;"
set objConn2 = CreateObject("ADODB.Connection") ' connexion pour récupérer les utilisateur de
' L'OU passé en paramétre
objConn2.Provider = "ADsDSOObject"
objConn2.Open "Active Directory Provider"
set objRSS = objConn2.Execute(strBase & strFilter & strAttrs & strScope)
objRSS.MoveFirst
Do While Not objRSS.EOF
if not ISNULL(objRSS.Fields(0).Value) then
utilisateur = objRSS.Fields(0).Value
end if
loop
end sub


une fois le script lancé l'erreur "le tableau n'existe pas " est déclenchée d'aprés la ligne
set objRSS = objConn2.Execute(strBase & strFilter & strAttrs & strScope)

je ne voie pas ou est le probléme, si quelqu'un peut m'aider je l'en remercie car la je suis un peu perdu ^^
je précise toutefois qu'une OU ne posséde pas forcément d'utilisateurs, mais l'erreur est tout de même déclenché pour les OU ne possédant que des utilisateurs.

merci à tous ceux qui lirons ce message
1 2