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

Récupérer la propriété memberof et l'ajouter

9 réponses
Avatar
dav8669
Bonjour,
C'est encore moi, je suis presque au bout.
Je cherche à récupérer la propriété memberof, à la stocker et à la réinjecter après.
Je peux l'afficher avec $i.Properties.memberof
MemberOf est de type DistinguishedName.
Supposons que je stocke mon résultat dans une variable
ex $membre=$i.Properties.memberof
Je souhaite après la réutiliser pour l'injecter par exemple $recup.put('memberof',$membre)
Sauf que la méthode put ne convient. Quelle méthode dois je utiliser? Merci

9 réponses

Avatar
Gilles LAURENT [MVP]
"dav8669" a écrit dans le message de
news:
| Bonjour,

Bonjour,

| C'est encore moi, je suis presque au bout.

Ouf ;-)

| Je cherche à récupérer la propriété memberof, à la stocker et à la
| réinjecter après.
| Je peux l'afficher avec $i.Properties.memberof
| MemberOf est de type DistinguishedName.
| Supposons que je stocke mon résultat dans une variable
| ex $membre=$i.Properties.memberof
| Je souhaite après la réutiliser pour l'injecter par exemple
| $recup.put('memberof',$membre)
[...]

Impossible de procéder comme cela car l'attribut MemberOf est géré par
le système. Il faut, pour réaliser cette opération, modifier les membres
du groupe avec les méthodes Add() et/ou Remove(). Cela aura pour effet
de mettre à jour automatiquement l'attribut MemberOf de l'utilisateur.
Par Exemple :

$i.properties.memberof | % {
$grp=[ADSI]"LDAP://$($_)" # bind
$grp.member.add($($recup.properties.distinguishedname))
$grp.setinfo()
}

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
dav8669
Gilles LAURENT [MVP] a écrit le 06/01/2009 à 16h15 :
"dav8669" a écrit dans le
message de
news:
| Bonjour,

Bonjour,

| C'est encore moi, je suis presque au bout.

Ouf ;-)

| Je cherche à récupérer la propriété
memberof, à la stocker et à la
| réinjecter après.
| Je peux l'afficher avec $i.Properties.memberof
| MemberOf est de type DistinguishedName.
| Supposons que je stocke mon résultat dans une variable
| ex $membre=$i.Properties.memberof
| Je souhaite après la réutiliser pour l'injecter par exemple
| $recup.put('memberof',$membre)
[...]

Impossible de procéder comme cela car l'attribut MemberOf est
géré par
le système. Il faut, pour réaliser cette opération,
modifier les membres
du groupe avec les méthodes Add() et/ou Remove(). Cela aura pour effet
de mettre à jour automatiquement l'attribut MemberOf de l'utilisateur.
Par Exemple :

$i.properties.memberof | % {
$grp=[ADSI]"LDAP://$($_)" # bind
$grp.member.add($($recup.properties.distinguishedname))
$grp.setinfo()
}

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


Bonjour,
Je n'ai pas tout suivi,c'est un peu technique pour moi.
Je cherche à récupérer l'attribut memberof pour chaque membre d'un groupeA et après l'injecter pour chaque membre d'un autre groupeB.
Je ne vois pas trop à quoi correspond le %
Merci
Avatar
Gilles LAURENT [MVP]
"dav8669" wrote:

Je n'ai pas tout suivi,c'est un peu technique pour moi.
Je cherche à récupérer l'attribut memberof pour chaque membre d'un groupeA et
après l'injecter pour chaque membre d'un autre groupeB.
Je ne vois pas trop à quoi correspond le %


[...]

L'attribut memberof d'un utilisateur est géré par le système. Cet attribut
doit être considéré comme étant en lecture seule. Pour modifier le contenu de
l'attribut memberof, il faut ajouter l'utilisateur à des groupes. Le système
mettra ensuite automatiquement à jour cet attribut. Le script PowerShell
ci-dessous détermine tout d'abord les groupes dont l'utilisateur $i est
membre (attribut memberof) puis ajoute l'utilisateur $recup à ces mêmes
groupes. Au final, les utilisateurs $i et $recup seront membres des mêmes
groupes.

$i.properties.memberof | ForEach-Object {
$grp=[ADSI]"LDAP://$($_)" # bind
$grp.member.add($($recup.properties.distinguishedname))
$grp.setinfo()
}

Note : % est l'alias builtin de ForEach-Object

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
dav8669
Gilles LAURENT [MVP] a écrit le 07/01/2009 à 11h31 :
"dav8669" wrote:

Je n'ai pas tout suivi,c'est un peu technique pour moi.
Je cherche à récupérer l'attribut memberof pour chaque
membre d'un groupeA et
après l'injecter pour chaque membre d'un autre groupeB.
Je ne vois pas trop à quoi correspond le %



[...]

L'attribut memberof d'un utilisateur est géré par le
système. Cet attribut
doit être considéré comme étant en lecture seule.
Pour modifier le contenu de
l'attribut memberof, il faut ajouter l'utilisateur à des groupes. Le
système
mettra ensuite automatiquement à jour cet attribut. Le script PowerShell
ci-dessous détermine tout d'abord les groupes dont l'utilisateur $i est
membre (attribut memberof) puis ajoute l'utilisateur $recup à ces
mêmes
groupes. Au final, les utilisateurs $i et $recup seront membres des mêmes
groupes.

$i.properties.memberof | ForEach-Object {
$grp=[ADSI]"LDAP://$($_)" # bind
$grp.member.add($($recup.properties.distinguishedname))
$grp.setinfo()
}

Note : % est l'alias builtin de ForEach-Object

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


On va faire sans la boucle.
#Je récupère mon premier utilisateur
$utilisateur1=[ADSI]"LDAP://*/cn=essai user1,ou=groupe1,dc=*,dc=*"
#Je récupère son memberof
$utilisateur1.Properties.memberof
#Je récupère mon deuxieme utilisateur
$utilisateur2=[ADSI]"LDAP://*/cn=essai user2,ou=groupe2,dc=*,dc=*"
Et là comment je peux injecter ce que j'ai récupérer pour l'utilisateur1???
Parce que toi dans ton exemple tu avais $i pour utilisateur1, $recup pour utilisateur1 et je vois pas trop ce que tu avais dans ton $grp
Merci
Avatar
Gilles LAURENT [MVP]
"dav8669" a écrit dans le message de
news:

| On va faire sans la boucle.
| #Je récupère mon premier utilisateur
| $utilisateur1=[ADSI]"LDAP://*/cn=essai user1,ou=groupe1,dc=*,dc=*"
| #Je récupère son memberof
| $utilisateur1.Properties.memberof
| #Je récupère mon deuxieme utilisateur
| $utilisateur2=[ADSI]"LDAP://*/cn=essai user2,ou=groupe2,dc=*,dc=*"
| Et là comment je peux injecter ce que j'ai récupérer pour
| l'utilisateur1??? Parce que toi dans ton exemple tu avais $i pour
| utilisateur1, $recup pour utilisateur1 et je vois pas trop ce que tu
| avais dans ton $grp

L'énumération (la boucle) ForEach-Object sur l'attribut memberof est
indispensable car l'utilisateur $utilisateur1 peut être membre de
plusieurs groupes. Ci-dessous un autre exemple avec commentaires
permettant d'ajouter $user2 dans les mêmes groupes que $user1

$user1=[ADSI]... # le DN complet de user1
$user2=[ADSI]... # le DN complet de user2

# récupération des groupes dont $user1 est membre
# pour cela on utilise l'attribut memberof qui contient les DN des
groupes
# cet attribut est en lecture seule car géré par le système
$groups=$user1.properties.memberof

# ajout de $user2 dans les mêmes groupes que $user1
# l'énumération est nécessaire car $groups peut contenir plusieurs
groupes
# les groupes vont transiter via le pipe "|" et seront récupérés un par
un
# dans la variable par défaut nommée $_
$groups | ForEach-Object {

# un groupe est disponible dans la variable $_
# une liaision (bind) est nécessaire pour ajouter $user2 dans le
groupe
$grp=[ADSI]"LDAP://$($_)" # bind

# la variable $grp contient l'objet groupe (méthodes et propriétés)
# il est donc maintenant possible d'ajouter $user2 dans le groupe
# on utilise ici la méthode "add" de l'objet groupe
$grp.member.add($($user2.properties.distinguishedname))

# l'opération précédente a été réalisée dans le cache
# il est nécessaire de mettre à jour l'annuaire Active Directory
$grp.setinfo()

# traitement du groupe suivant
# le groupe suivant est automatiquement extrait du pipe
# si aucun groupe n'est disponible alors l'énumération s'arrête

}

# traitement terminé
# l'attribut memberof de $user2 est automatiquement mis à jour
# affichage des groupes dont $user2 est maintenant membre
$user2.properties.memberof

Est-ce plus clair ?

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
dav8669
Gilles LAURENT [MVP] a écrit le 08/01/2009 à 10h36 :
"dav8669" a écrit dans le
message de
news:

| On va faire sans la boucle.
| #Je récupère mon premier utilisateur
| $utilisateur1=[ADSI]"LDAP://*/cn=essai user1,ou=groupe1,dc=*,dc=*"
| #Je récupère son memberof
| $utilisateur1.Properties.memberof
| #Je récupère mon deuxieme utilisateur
| $utilisateur2=[ADSI]"LDAP://*/cn=essai user2,ou=groupe2,dc=*,dc=*"
| Et là comment je peux injecter ce que j'ai récupérer
pour
| l'utilisateur1??? Parce que toi dans ton exemple tu avais $i pour
| utilisateur1, $recup pour utilisateur1 et je vois pas trop ce que tu
| avais dans ton $grp

L'énumération (la boucle) ForEach-Object sur l'attribut memberof
est
indispensable car l'utilisateur $utilisateur1 peut être membre de
plusieurs groupes. Ci-dessous un autre exemple avec commentaires
permettant d'ajouter $user2 dans les mêmes groupes que $user1

$user1=[ADSI]... # le DN complet de user1
$user2=[ADSI]... # le DN complet de user2

# récupération des groupes dont $user1 est membre
# pour cela on utilise l'attribut memberof qui contient les DN des
groupes
# cet attribut est en lecture seule car géré par le
système
$groups=$user1.properties.memberof

# ajout de $user2 dans les mêmes groupes que $user1
# l'énumération est nécessaire car $groups peut contenir
plusieurs
groupes
# les groupes vont transiter via le pipe "|" et seront
récupérés un par
un
# dans la variable par défaut nommée $_
$groups | ForEach-Object {

# un groupe est disponible dans la variable $_
# une liaision (bind) est nécessaire pour ajouter $user2 dans le
groupe
$grp=[ADSI]"LDAP://$($_)" # bind

# la variable $grp contient l'objet groupe (méthodes et
propriétés)
# il est donc maintenant possible d'ajouter $user2 dans le groupe
# on utilise ici la méthode "add" de l'objet groupe
$grp.member.add($($user2.properties.distinguishedname))

# l'opération précédente a été
réalisée dans le cache
# il est nécessaire de mettre à jour l'annuaire Active Directory
$grp.setinfo()

# traitement du groupe suivant
# le groupe suivant est automatiquement extrait du pipe
# si aucun groupe n'est disponible alors l'énumération
s'arrête

}

# traitement terminé
# l'attribut memberof de $user2 est automatiquement mis à jour
# affichage des groupes dont $user2 est maintenant membre
$user2.properties.memberof

Est-ce plus clair ?

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


Merci,
Oui en effet c'est plus clair.Mais sa ne passe toujours pas...

$user1=[ADSI]"LDAP://ipbidon/cn=nom1 prenom1,ou=groupe1ou=test,dc=domain,dc=fr"
$user1
$user2=[ADSI]"LDAP://ipbidon/cn=nom2 prenom2,ou=groupe2,ou=test,dc=domain,dc=fr"
$user2
$groups=$user1.properties.memberof
$groups | ForEach-Object {
$grp=[ADSI]"LDAP://$($_)"
#mon problème se situe ici. Est ce que je le copie colle comme tel. J'ai essayé en ajoutant l'ip ou est-ce qu'il faut que je complète.

$grp.member.add($($user2.properties.distinguishedname))
$grp.setinfo()
}
$user2.properties.memberof

#Lors de l'execution du script, il se produit une erreur lors de l'appel de la méthode add. Aparament l'argument n'est pas reconnu. La valeur ne peut pas être null.
Pourtant mon utilisateur1 est bien membre de plusieurs groupes.
Avatar
Gilles LAURENT [MVP]
"dav8669" a écrit dans le message de
news:

| Lors de l'execution du script, il se produit une erreur lors de
| l'appel de la méthode add. Aparament l'argument n'est pas reconnu. La
| valeur ne peut pas être null.
| Pourtant mon utilisateur1 est bien membre de plusieurs groupes.

Vous devez être en PowerShell v1. Je viens de tester avec cette version
et en effet une adaptation s'impose. Ci-dessous le script v1 compatible
v2 CTP :

$user1=[ADSI]... # le DN complet de user1
$user2=[ADSI]... # le DN complet de user2

$user1.memberof | ForEach-Object {
$grp=[ADSI]"LDAP://$($_)" # bind
$grp.member.add($($user2.properties.distinguishedname))
$grp.setinfo()
}
$($user2.memberof)

Note: Si vous exécuter le code à distance alors il sera nécessaire de
spécifier le nom du serveur dans les chemins LDAP, par exemple
LDAP://server/... avec "server" le nom netbios du contrôleur de domaine.

Toutes mes excuses :'-(

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
Gilles LAURENT [MVP]
"Gilles LAURENT [MVP]" a écrit dans le message de
news:%

Décidément !! Ci-dessous la version finale (j'espère)

$user1=[ADSI]... # le DN complet de user1
$user2=[ADSI]... # le DN complet de user2

$user1.memberof | ForEach-Object {
$grp=[ADSI]"LDAP://$($_)" # bind
$grp.member.add($($user2.distinguishedname))
$grp.setinfo()
}
$($user2.memberof)

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
dav8669
Gilles LAURENT [MVP] a écrit le 08/01/2009 à 12h24 :
"Gilles LAURENT [MVP]" a écrit dans le
message de
news:%

Décidément !! Ci-dessous la version finale (j'espère)

$user1=[ADSI]... # le DN complet de user1
$user2=[ADSI]... # le DN complet de user2

$user1.memberof | ForEach-Object {
$grp=[ADSI]"LDAP://$($_)" # bind
$grp.member.add($($user2.distinguishedname))
$grp.setinfo()
}
$($user2.memberof)

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


Merci beaucoup Gilles
Tout est passé avec la v2, cela fonctionne ! Les groupes ont bien été ajouté à l'utilisateur.