Question OpenLdap

Plus d'informations
il y a 15 ans 11 mois #6414 par Jireck
OpenLdap a été créé 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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 11 mois #6500 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:OpenLdap
Salut,
Jireck écrit:

Partage et on partagera avec toi

Je veux bien un morceau du gâteau ;-)
Jireck écrit:

Bien que personne ne m'aide ici :( mais bon...

Il faut tout de même connaître le domaine que tu traites, on peut aussi ne pas avoir la réponse à ta question.
Dans ce cas quel est l'intérêt de te le dire ?

Jireck écrit:

puis-je faire un return $j ?

A priori oui, mais que veux tu récupérer, une collection d'utilisateurs ?
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:

dois-je refaire un ...

Quel est l'objectif ? Créer le compte issu de l'annuaire source DANS l'annuaire cible ?
Jireck écrit:

si oui, il y t il conflit de password..?? l'authentification étant obligatoire sur openldap

Je ne sais pas. Je ne suis pas sûr d'avoir compris, tu veux utiliser un seul mot de passe ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
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 ....

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.060 secondes
Propulsé par Kunena