Question
OpenLdap
- Jireck
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 44
- Remerciements reçus 0
il y a 15 ans 11 mois #6414
par Jireck
Bonjour tout le monde,
J'essaye tant bien que mal (surtout) de me connecter sur un serveur openldap afin de récupérer les utilisateurs.
J'utilise le code suivant :
[code:1]Param($user,
$password = $(Read-Host \"Enter Password\" -asSec),
$filter = \"(objectclass=user)\",
$server = $(throw '$server is required'),
$path = $(throw '$path is required'),
[switch]$all,
[switch]$verbose)
function GetSecurePass ($SecurePassword) {
$Ptr = [System.Runtime.InteropServices.Marshal]::«»SecureStringToCoTaskMemUnicode($SecurePassword)
$password = [System.Runtime.InteropServices.Marshal]::«»PtrToStringUni($Ptr)
[System.Runtime.InteropServices.Marshal]::ZeroFreeCoTaskMemUnicode($Ptr)
$password
}
if($verbose){$verbosepreference = \"Continue\"}
$DN = \"LDAP://$server/$path\"
Write-Verbose \"DN = $DN\"
$auth = [System.DirectoryServices.AuthenticationTypes]::FastBind
Write-Verbose \"Auth = FastBind\"
$de = New-Object System.DirectoryServices.DirectoryEntry($DN,$user,(GetSecurePass $Password),$auth)
Write-Verbose $de
Write-Verbose \"Filter: $filter\"
$ds = New-Object system.DirectoryServices.DirectorySearcher($de,$filter)
Write-Verbose $ds
if($all)
{
Write-Verbose \"Finding All\"
$ds.FindAll()
}
else
{
Write-Verbose \"Finding One\"
$ds.FindOne()
}[/code:1]
et fait un appel du genre :
-user adminopenldap -server server.dom.fr -path \"ou=people,ou=xxx,dc=dc,dc=org\"
et j'obtiens l'erreur suivant :
[code:1]Exception lors de l'appel de « FindOne » avec « 0 » argument(s) : « Erreur inco
nnue (0x80005000) »
Au niveau : 43 Caractère : 16
+ $ds.FindOne <<<< ()
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException[/code:1]
auriez vous des pistes...
Merci par avance
J'essaye tant bien que mal (surtout) de me connecter sur un serveur openldap afin de récupérer les utilisateurs.
J'utilise le code suivant :
[code:1]Param($user,
$password = $(Read-Host \"Enter Password\" -asSec),
$filter = \"(objectclass=user)\",
$server = $(throw '$server is required'),
$path = $(throw '$path is required'),
[switch]$all,
[switch]$verbose)
function GetSecurePass ($SecurePassword) {
$Ptr = [System.Runtime.InteropServices.Marshal]::«»SecureStringToCoTaskMemUnicode($SecurePassword)
$password = [System.Runtime.InteropServices.Marshal]::«»PtrToStringUni($Ptr)
[System.Runtime.InteropServices.Marshal]::ZeroFreeCoTaskMemUnicode($Ptr)
$password
}
if($verbose){$verbosepreference = \"Continue\"}
$DN = \"LDAP://$server/$path\"
Write-Verbose \"DN = $DN\"
$auth = [System.DirectoryServices.AuthenticationTypes]::FastBind
Write-Verbose \"Auth = FastBind\"
$de = New-Object System.DirectoryServices.DirectoryEntry($DN,$user,(GetSecurePass $Password),$auth)
Write-Verbose $de
Write-Verbose \"Filter: $filter\"
$ds = New-Object system.DirectoryServices.DirectorySearcher($de,$filter)
Write-Verbose $ds
if($all)
{
Write-Verbose \"Finding All\"
$ds.FindAll()
}
else
{
Write-Verbose \"Finding One\"
$ds.FindOne()
}[/code:1]
et fait un appel du genre :
-user adminopenldap -server server.dom.fr -path \"ou=people,ou=xxx,dc=dc,dc=org\"
et j'obtiens l'erreur suivant :
[code:1]Exception lors de l'appel de « FindOne » avec « 0 » argument(s) : « Erreur inco
nnue (0x80005000) »
Au niveau : 43 Caractère : 16
+ $ds.FindOne <<<< ()
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException[/code:1]
auriez vous des pistes...
Merci par avance
Connexion ou Créer un compte pour participer à la conversation.
- Jireck
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 44
- Remerciements reçus 0
il y a 15 ans 11 mois #6415
par Jireck
Réponse de Jireck sur le sujet Re:OpenLdap
Je me réponds ma c'est bien le but d'un forum et d'une entre aide....
Je viens de réussir a me connecter et donc d'avoir un retour ....
Mon erreur venais de mon lancement
[code:1]-user adminopenldap -server server.dom.fr -path \"ou=people,ou=xxx,dc=dc,dc=org\"[/code:1]
Donne une erreur alors que
[code:1]
-user 'uid=adminopenldap,xxxxx...dc=org' -server server.dom.fr -path 'ou=people,ou=xxx,dc=dc,dc=org'[/code:1]
La différence est dans le simple quote et double quote...
Voila si ca aide quelqu'un j'en suis heureux...
Maintenant je cherche à traiter ce retour...
Pour ensuite alimenter mon AD
Toujours si vous avez des conseils ou aides merci d'avance
Je viens de réussir a me connecter et donc d'avoir un retour ....
Mon erreur venais de mon lancement
[code:1]-user adminopenldap -server server.dom.fr -path \"ou=people,ou=xxx,dc=dc,dc=org\"[/code:1]
Donne une erreur alors que
[code:1]
-user 'uid=adminopenldap,xxxxx...dc=org' -server server.dom.fr -path 'ou=people,ou=xxx,dc=dc,dc=org'[/code:1]
La différence est dans le simple quote et double quote...
Voila si ca aide quelqu'un j'en suis heureux...
Maintenant je cherche à traiter ce retour...
Pour ensuite alimenter mon AD
Toujours si vous avez des conseils ou aides merci d'avance
Connexion ou Créer un compte pour participer à la conversation.
- Jireck
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 44
- Remerciements reçus 0
il y a 15 ans 11 mois #6426
par Jireck
Réponse de Jireck sur le sujet Re:OpenLdap
Bonjour tout le monde,
Je continue....
Je récupère tous les utilisateurs depuis openldap.
Puis je les inject dans mon AD. pour cela j'utilise le tres bon script powershell-scripting.com/index.php?optio...;id=72&Itemid=71
Mais comme parfois j'ai le mot de passe en claire sur openldap j'essaye de faire un set sur l'AD et là ... Erreur..
[code:1]$DNTEST = 'LDAP://DOMC/OU=Utilisateurs,OU=Etudiants,OU=People and Groupe,DC=DOM,DC=local'
$usersOU = New-Object System.DirectoryServices.DirectoryEntry($DNTEST,$userAD,(GetSecurePass $Password),$auth)
$objUser = $usersOU.Create(\"user\", \"cn=Arnaud Petitjean\"«»)
$objUser.put(\"sAMAccountName\", \"petitjeana\"«»)
# Chemin de la homedirectory
$objUser.put(\"homeDirectory\", \"\\monserveur\users\petitjean\"«»)
# Lettre de la homedirectory
$objUser.put(\"homeDrive\", \"H:\"«»)
$objUser.setPassword('azerty')
$objUser.SetInfo()[/code:1]
SetPassword me fait une erreur
[code:1]Exception lors de l'appel de « setPassword » avec « 1 » argument(s) : « Au moins un paramètre d'entrée n'est pas valide »
73 Caractère : 21
+ $objUser.setPassword <<<< (\"azerty\"«»)
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI[/code:1]
L'utilisateur est bien créé.
Faut que je test si le mot de passe est setté mais cela m'étonnerais.
Si vous avez une info, une aide SVP
Je continue....
Je récupère tous les utilisateurs depuis openldap.
Puis je les inject dans mon AD. pour cela j'utilise le tres bon script powershell-scripting.com/index.php?optio...;id=72&Itemid=71
Mais comme parfois j'ai le mot de passe en claire sur openldap j'essaye de faire un set sur l'AD et là ... Erreur..
[code:1]$DNTEST = 'LDAP://DOMC/OU=Utilisateurs,OU=Etudiants,OU=People and Groupe,DC=DOM,DC=local'
$usersOU = New-Object System.DirectoryServices.DirectoryEntry($DNTEST,$userAD,(GetSecurePass $Password),$auth)
$objUser = $usersOU.Create(\"user\", \"cn=Arnaud Petitjean\"«»)
$objUser.put(\"sAMAccountName\", \"petitjeana\"«»)
# Chemin de la homedirectory
$objUser.put(\"homeDirectory\", \"\\monserveur\users\petitjean\"«»)
# Lettre de la homedirectory
$objUser.put(\"homeDrive\", \"H:\"«»)
$objUser.setPassword('azerty')
$objUser.SetInfo()[/code:1]
SetPassword me fait une erreur
[code:1]Exception lors de l'appel de « setPassword » avec « 1 » argument(s) : « Au moins un paramètre d'entrée n'est pas valide »
73 Caractère : 21
+ $objUser.setPassword <<<< (\"azerty\"«»)
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI[/code:1]
L'utilisateur est bien créé.
Faut que je test si le mot de passe est setté mais cela m'étonnerais.
Si vous avez une info, une aide SVP
Connexion ou Créer un compte pour participer à la conversation.
- Jireck
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 44
- Remerciements reçus 0
il y a 15 ans 11 mois #6498
par Jireck
Réponse de Jireck sur le sujet Re:OpenLdap
Salut Tout le monde,
Je reviens avec ma progression...
Bien que personne ne m'aide ici
mais bon...
Partage et on partagera avec toi
J'arrive donc à importer tous mes membres OpenLdap vers mon AD
Tous les users ne sont pas à importer, je me lance dans un filtre via groupe Openldap.
Comment faire ??
pour l'instant je fais comme avant en changeant le filtre pour avoir mes groupes:
[code:1]Param($user,
$password = $(Read-Host \"Enter Password\" -asSec),
$filter = \"(objectclass=group)\",
$server = $(throw '$server is required'),
$path = $(throw '$path is required'),
[switch]$all,
[switch]$verbose)
function GetSecurePass ($SecurePassword) {
$Ptr = [System.Runtime.InteropServices.Marshal]::«»SecureStringToCoTaskMemUnicode($SecurePassword)
$password = [System.Runtime.InteropServices.Marshal]::«»PtrToStringUni($Ptr)
[System.Runtime.InteropServices.Marshal]::ZeroFreeCoTaskMemUnicode($Ptr)
$password
}
if($verbose){$verbosepreference = \"Continue\"}
$DN = \"LDAP://$server/$path\"
Write-Verbose \"DN = $DN\"
$auth = [System.DirectoryServices.AuthenticationTypes]::FastBind
Write-Verbose \"Auth = FastBind\"
$de = New-Object System.DirectoryServices.DirectoryEntry($DN,$user,(GetSecurePass $Password),$auth)
Write-Verbose $de
Write-Verbose \"Filter: $filter\"
$ds = New-Object system.DirectoryServices.DirectorySearcher($de,$filter)
Write-Verbose $ds
Write-Verbose \"Finding All\"
$GetAll = $ds.FindAll()
[/code:1]
Et je fais un simple comparaison et ramene tous les membres:
[code:1]
foreach ($i in $GetAll) {
if ($i.Properties.cn -eq 'Groupe-rechercher'){
foreach ($j in $i.Properties.member) {
write OK $j
}
}
}[/code:1]
J'obtiens alors un write avec le Path openldap des membre, du genre :
uid=toto,ou=xxx,dc=dom,dc=fr
puis-je faire un return $j ?
dois-je refaire un
[code:1]New-Object System.DirectoryServices.DirectoryEntry($DNTEST,$userAD,(GetSecurePass $Password),$auth) ?[/code:1]
si oui, il y t il conflit de password..?? l'authentification étant obligatoire sur openldap
En essayant d'etre claire ...
Merci à vous et à vos réponses
Je reviens avec ma progression...
Bien que personne ne m'aide ici
Partage et on partagera avec toi
J'arrive donc à importer tous mes membres OpenLdap vers mon AD
Tous les users ne sont pas à importer, je me lance dans un filtre via groupe Openldap.
Comment faire ??
pour l'instant je fais comme avant en changeant le filtre pour avoir mes groupes:
[code:1]Param($user,
$password = $(Read-Host \"Enter Password\" -asSec),
$filter = \"(objectclass=group)\",
$server = $(throw '$server is required'),
$path = $(throw '$path is required'),
[switch]$all,
[switch]$verbose)
function GetSecurePass ($SecurePassword) {
$Ptr = [System.Runtime.InteropServices.Marshal]::«»SecureStringToCoTaskMemUnicode($SecurePassword)
$password = [System.Runtime.InteropServices.Marshal]::«»PtrToStringUni($Ptr)
[System.Runtime.InteropServices.Marshal]::ZeroFreeCoTaskMemUnicode($Ptr)
$password
}
if($verbose){$verbosepreference = \"Continue\"}
$DN = \"LDAP://$server/$path\"
Write-Verbose \"DN = $DN\"
$auth = [System.DirectoryServices.AuthenticationTypes]::FastBind
Write-Verbose \"Auth = FastBind\"
$de = New-Object System.DirectoryServices.DirectoryEntry($DN,$user,(GetSecurePass $Password),$auth)
Write-Verbose $de
Write-Verbose \"Filter: $filter\"
$ds = New-Object system.DirectoryServices.DirectorySearcher($de,$filter)
Write-Verbose $ds
Write-Verbose \"Finding All\"
$GetAll = $ds.FindAll()
[/code:1]
Et je fais un simple comparaison et ramene tous les membres:
[code:1]
foreach ($i in $GetAll) {
if ($i.Properties.cn -eq 'Groupe-rechercher'){
foreach ($j in $i.Properties.member) {
write OK $j
}
}
}[/code:1]
J'obtiens alors un write avec le Path openldap des membre, du genre :
uid=toto,ou=xxx,dc=dom,dc=fr
puis-je faire un return $j ?
dois-je refaire un
[code:1]New-Object System.DirectoryServices.DirectoryEntry($DNTEST,$userAD,(GetSecurePass $Password),$auth) ?[/code:1]
si oui, il y t il conflit de password..?? l'authentification étant obligatoire sur openldap
En essayant d'etre claire ...
Merci à vous et à vos réponses
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 15 ans 11 mois #6500
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:OpenLdap
Salut,
Jireck écrit:
Jireck écrit:
Dans ce cas quel est l'intérêt de te le dire ?
Jireck écrit:
Pourquoi ne pas renvoyer $i.Properties.member ?
[code:1]
$ds.FindAll() |
Where-Object {$_.Properties.cn -eq 'Groupe-rechercher')|
foreach-Object {$i.Properties.member}
[/code:1]
Jireck écrit:
Jireck écrit:
Jireck écrit:
Je veux bien un morceau du gâteauPartage et on partagera avec toi
Jireck écrit:
Il faut tout de même connaître le domaine que tu traites, on peut aussi ne pas avoir la réponse à ta question.Bien que personne ne m'aide ici
mais bon...
Dans ce cas quel est l'intérêt de te le dire ?
Jireck écrit:
A priori oui, mais que veux tu récupérer, une collection d'utilisateurs ?puis-je faire un return $j ?
Pourquoi ne pas renvoyer $i.Properties.member ?
[code:1]
$ds.FindAll() |
Where-Object {$_.Properties.cn -eq 'Groupe-rechercher')|
foreach-Object {$i.Properties.member}
[/code:1]
Jireck écrit:
Quel est l'objectif ? Créer le compte issu de l'annuaire source DANS l'annuaire cible ?dois-je refaire un ...
Jireck écrit:
Je ne sais pas. Je ne suis pas sûr d'avoir compris, tu veux utiliser un seul mot de passe ?si oui, il y t il conflit de password..?? l'authentification étant obligatoire sur openldap
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Jireck
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 44
- Remerciements reçus 0
il y a 15 ans 11 mois #6501
par Jireck
Réponse de Jireck sur le sujet Re:OpenLdap
Salut a toi Laurent,
Tiens, je suis en train de préparer un morceau de gâteau.
Objectif :
récupérer sur un annuaire OpenLdap plusieurs personnes (1500 environ) appartenant à divers groupes de l'annuaire, et d'après ces groupes créer les utilisateurs dans l'AD 2008 dans la bonne OU.
Exemple :
toto, tutu, titi du groupe \"lesT\" dans OLdap
momo, mumu, mimi du groupe \"lesM\" dans Oldap
tuti, momu, popo du groupe \"lesAutres\" dans Oldap
les utilisateurs sont tous dans la même OU User Oldap
Je veux récupérer les personnes des groupes lesT, lesM et les assigné dans les Ou \"LesTUsers\" et Ou \"LesMUsers\"
Bref comme tu le dis \"Créer le compte issu de l'annuaire source DANS l'annuaire cible \"
Le planles Grandes lignes :
- Faire fonction RecupLesMembreduGroupeOL($Groupe){return array NomMembre}
- Faire fonction RecupMembreDetailOL($UserOpenLdap){return array membre}
- Faire fonction CheckADUserExiste($userAD){return true / false}
- Faire fonction CreateADUserInGoodOU($UserAD,$OU){return True / False}
Voila j'espère avoir répondu aux questions. je n'est aucun problème au niveau de la création, etc ... de l'AD que je contrôle et maitrise de A à Z, ce qui est loin d'être vrai pour OpenLdap où mes accès sont plus que limité,etc ....
Tiens, je suis en train de préparer un morceau de gâteau.
Objectif :
récupérer sur un annuaire OpenLdap plusieurs personnes (1500 environ) appartenant à divers groupes de l'annuaire, et d'après ces groupes créer les utilisateurs dans l'AD 2008 dans la bonne OU.
Exemple :
toto, tutu, titi du groupe \"lesT\" dans OLdap
momo, mumu, mimi du groupe \"lesM\" dans Oldap
tuti, momu, popo du groupe \"lesAutres\" dans Oldap
les utilisateurs sont tous dans la même OU User Oldap
Je veux récupérer les personnes des groupes lesT, lesM et les assigné dans les Ou \"LesTUsers\" et Ou \"LesMUsers\"
Bref comme tu le dis \"Créer le compte issu de l'annuaire source DANS l'annuaire cible \"
Le planles Grandes lignes :
- Faire fonction RecupLesMembreduGroupeOL($Groupe){return array NomMembre}
- Faire fonction RecupMembreDetailOL($UserOpenLdap){return array membre}
- Faire fonction CheckADUserExiste($userAD){return true / false}
- Faire fonction CreateADUserInGoodOU($UserAD,$OU){return True / False}
Voila j'espère avoir répondu aux questions. je n'est aucun problème au niveau de la création, etc ... de l'AD que je contrôle et maitrise de A à Z, ce qui est loin d'être vrai pour OpenLdap où mes accès sont plus que limité,etc ....
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.060 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- OpenLdap