Question Récupérer UID LDAP Unix pour créer compte AD

Plus d'informations
il y a 13 ans 1 mois #2245 par Laurent Dardenne
essaie aussi avec cette version de la librairie Novell

La pièce jointe Novell_Ldap.zip est absente ou indisponible


Tutoriels PowerShell
Pièces jointes :

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

Plus d'informations
il y a 13 ans 1 mois #2246 par bill_
[code:1]param([string] $serveur, [string] $DN, [string] $attribut)
$serveur = \"mon_serveur_ldap\"
$DN = \"CN=toto,OU=people,DC=masociete,DC=fr\"
$attribut = \"cn\"

# Charge l'assembly Novell
$FullPath = \"C:\Novell.Directory.Ldap.dll\"
[void][Reflection.Assembly]::LoadFile($FullPath)
$ldapConn = New-Object Novell.Directory.Ldap.LdapConnection
$ldapException = New-Object Novell.Directory.Ldap.LdapException
$LdapEntry = New-Object Novell.Directory.Ldap.LdapEntry


&{
$ldapConn.Connect($serveur,389)
$ldapConn.Bind($DN,$passwd)

$lsc = $ldapConn.Search(\"OU=people,DC=masociete,DC=fr\",$LdapConnection.SCOPE_ONE,\"ObjectClass=*\",$null,$false)
#Write-Host $lsc

while ($lsc.hasMore())
{
[Novell.Directory.Ldap.LdapEntry] $nextEntry = $Null

#Exception is thrown, go for next entry
trap [Novell.Directory.Ldap.LdapException]
{ Write-Warning Write-Host \"Error: $_.LdapErrorMessage\"; Continue }

{
$nextEntry = $lsc.next()
}

Write-Host \"$nextEntry.DN\"
[Novell.Directory.Ldap.LdapAttributeSet] $attributeSet = $nextEntry.getAttributeSet()
[System.Collections.IEnumerator] $ienum = $attributeSet.GetEnumerator()

while($ienum.MoveNext())
{
[Novell.Directory.Ldap.LdapAttribute] $attribute=[LdapAttribute] $ienum.Current
[string] $attributeName = $attribute.Name;
[string] $attributeVal = $attribute.StringValue;
Write-Host \"$attribute.Name - Value: $attribute.StringValue\"
}
}
Write-Host \"Success !\"
$LdapConn.Disconnect()[/code:1]

J'ai essayé avec l'autre version de la .dll c'est la même chose<br><br>Message édité par: spz, à: 23/04/08 14:14

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

Plus d'informations
il y a 13 ans 1 mois #2247 par Laurent Dardenne
Est-ce que $LdapConnection.SCOPE_ONE vaux bien 1 ?
as-tu essayé avec une autre valeur, par exemple SCOPE_BASE ?
Test avec \&quot;(objectclass=*)\&quot; au lieu de \&quot;ObjectClass=*\&quot;, ce paramètre suit une syntaxe particulière, vérifie dans la doc, je crois que le code C# d'exemple est faux.
Essaie avec le contenu de $DN au lieu de \&quot;OU=people,DC=masociete,DC=fr\&quot;, je ne sais pas si c'est sensée...

Enfin vérifie si hasmore renvoie bien $false :
[code:1]if (!$lsc.hasMore()) {write \&quot;Plus de donnée.\&quot;} else {write \&quot;Des données sont disponibles\&quot;}[/code:1]
Je ne peut pas faire grand chose de plus car on ne sais pas si la requête que tu effectues est juste ou pas.

Il te faut un outil externe pour valider ton script.

Tutoriels PowerShell

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

Plus d'informations
il y a 13 ans 1 mois #2249 par bill_
Oups j'ai pas vu ton post, j'ai fait un test et je crois que je viens de trouver, j'ai ajouté le $Entry avec son contenu :

[code:1]$ldapConn.Connect($serveur,389)
$ldapConn.Bind($DN,$passwd)
$Entry = $LdapConn.Read($DN)[/code:1]
J'ai mis à la suite un Write-Host $Entry et ça m'affiche :

LdapEntry: cn=toto,ou=people,dc=masociete,dc=fr; LdapAttributeSet: LdapAttribute: {type='sn', value='toto'} LdapAttribute: {type='userPassword', value='{CRYPT}7kROYm1GQfxnF'} LdapAttribute: {type='cn', value='toto'} LdapAttribute: {type='objectClass', values='top','person'}


Je pense que je touche au bout<br><br>Message édité par: spz, à: 23/04/08 16:23

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

Plus d'informations
il y a 13 ans 1 mois #2250 par Laurent Dardenne
spz écrit:

Je pense que je touche au bout

Je doute, mais qui veux vivre est condamné à l'espoir ;)
Je dirais que tu reviens qq post en arrière, bon on verra bien.

Tutoriels PowerShell

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

Plus d'informations
il y a 13 ans 1 mois #2253 par bill_
Bonjour à toi

Ok, je viens de comprendre, je sais que déjà que ça fonctionne, maintenant je code pour afficher seulement un seul attribut grâce à la recherche, seulement il me dit une erreur, voici le code mis à jour :

[code:1]$lsc = $ldapConn.Search(\&quot;OU=people,O=masociete,O=fr\&quot;,$LdapConnection.SCOPE_ONE,\&quot;(&amp;(objectClass=\&quot; + $DN + \&quot;«»))\&quot;,$null,$false)

while ($lsc.hasMore())
{
[Novell.Directory.Ldap.LdapEntry] $nextEntry = $Null

#Exception is thrown, go for next entry
trap [Novell.Directory.Ldap.LdapException]
{
Write-Warning Write-Host \&quot;Error: $_.LdapErrorMessage\&quot;; Continue
}
{
$nextEntry = $lsc.next()
}
Write-Host \&quot;$nextEntry.DN\&quot;
[Novell.Directory.Ldap.LdapAttributeSet] $attributeSet = $nextEntry.getAttributeSet()
[System.Collections.IEnumerator] $ienum = $attributeSet.GetEnumerator()

while($ienum.MoveNext())
{
[Novell.Directory.Ldap.LdapAttribute] $attribute=[LdapAttribute] $ienum.Current
[string] $attributeName = $attribute.Name;
[string] $attributeVal = $attribute.StringValue;
Write-Host \&quot;Value: $attribute.StringValue\&quot;
}
}[/code:1]

En modifiant le début de cette ligne, j'ai changé DC par O :

[code:1]$ldapConn.Search(\&quot;OU=people,O=masociete,O=fr\&quot;[/code:1]

et maintenant le script rentre dans la boucle while qui suit, mais j'ai cette erreur :

Source : System.Management.Automation.RuntimeException
Erreur : Vous ne pouvez pas appeler de méthode sur une expression ayant la valeur Null.


Et ça pointe sur cette ligne :

[code:1][Novell.Directory.Ldap.LdapAttributeSet] $attributeSet = $nextEntry.getAttributeSet()[/code:1]

La variable $nextEntry est toujorus null pour lui :S

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

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