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

Tester si un utilisateur appartient à un groupe en Powershell

10 réponses
Avatar
dav8669
Bonjour,
J'ai plusieurs groupes et je voudrais tester pour chaque groupe que l'utilisateur appartient au groupe.
Merci

10 réponses

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

Bonjour,

| J'ai plusieurs groupes et je voudrais tester pour chaque groupe que
| l'utilisateur appartient au groupe.

Le script ci-dessous (Powershell V2 CTP) recherche l'ensemble des
groupes du domaine puis affiche sous forme de tableau formaté (Group,
Member) l'appartenance ou non de l'utilisateur "$user" aux groupes.

$view = `
@{Label="Group";`
Expression={$_.properties.name}}, `
@{Label="Member";`
Expression={$_.properties.member -contains $user.distinguishedname}}

$user=[ADSI]"LDAP://cn=user,ou=test,dc=domain,dc=local"
$searcher=[adsisearcher]"(objectclass=group)"
$searcher.searchroot="LDAP://dc=domain,dc=local"
$searcher.findall() | Format-Table $view -a

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

Bonjour,

| J'ai plusieurs groupes et je voudrais tester pour chaque groupe que
| l'utilisateur appartient au groupe.

Le script ci-dessous (Powershell V2 CTP) recherche l'ensemble des
groupes du domaine puis affiche sous forme de tableau formaté (Group,
Member) l'appartenance ou non de l'utilisateur "$user" aux groupes.

$view = `
@{Label="Group";`
Expression={$_.properties.name}}, `
@{Label="Member";`
Expression={$_.properties.member -contains $user.distinguishedname}}

$user=[ADSI]"LDAP://cn=user,ou=test,dc=domain,dc=local"
$searcher=[adsisearcher]"(objectclass=group)"
$searcher.searchroot="LDAP://dc=domain,dc=local"
$searcher.findall() | Format-Table $view -a

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


Bonjour,
Merci pour ta solution avec la vue mais elle est pas adaptée à mes besoins.
En effet, en fonction si l'utilisateur appartient à un groupe ou non, je fais un traitement.
Donc comment récupérer la valeur souhaitée dans la vue?
De plus je connais les groupes que je veux tester pour l'utilisateur donc il y a peut être pas besoin de parcourir tout le domaine?
Merci
Avatar
Gilles LAURENT [MVP]
"dav8669" a écrit dans le message de
news:
| Bonjour,

Bonjour,

| Merci pour ta solution avec la vue mais elle est pas adaptée à mes
| besoins. En effet, en fonction si l'utilisateur appartient à un
| groupe ou non, je fais un traitement.
| Donc comment récupérer la valeur souhaitée dans la vue?
| De plus je connais les groupes que je veux tester pour l'utilisateur
| donc il y a peut être pas besoin de parcourir tout le domaine?

$user=[adsi]"LDAP://cn=user,ou=test,dc=domain,dc=local" # bind
$group=[adsi]"LDAP://cn=group,ou=test,dc=domain,dc=local" #bind
$ismember=$group.member -contains $user.distinguishedname
if ($ismember) {
"traitement"
}

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

Bonjour,

| Merci pour ta solution avec la vue mais elle est pas adaptée à
mes
| besoins. En effet, en fonction si l'utilisateur appartient à un
| groupe ou non, je fais un traitement.
| Donc comment récupérer la valeur souhaitée dans la vue?
| De plus je connais les groupes que je veux tester pour l'utilisateur
| donc il y a peut être pas besoin de parcourir tout le domaine?

$user=[adsi]"LDAP://cn=user,ou=test,dc=domain,dc=local" # bind
$group=[adsi]"LDAP://cn=group,ou=test,dc=domain,dc=local" #bind
$ismember=$group.member -contains $user.distinguishedname
if ($ismember) {
"traitement"
}

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


Bonjour
$user=[ADSI]"LDAP://1*/cn=*ou=*,dc=*,dc=*"
$user
$user.memberof | ForEach-Object {
$ismember =$group.member -contains $user.distinguishedname
$ismember
Mon problème consiste à afficher pour chaque objet, le nom du groupe.
Merci
Avatar
Gilles LAURENT [MVP]
"dav8669" wrote:

Bonjour



Bonjour,

$user=[ADSI]"LDAP://1*/cn=*ou=*,dc=*,dc=*"
$user
$user.memberof | ForEach-Object {
$ismember =$group.member -contains $user.distinguishedname
$ismember
Mon problème consiste à afficher pour chaque objet, le nom du groupe.



Le nom des groupes (et non le dn) dont l'utilisateur est membre ?

$user=[adsi]"LDAP://cn=user,ou=test,dc=domain,dc=local"
$user.memberof | % {
$_.split('=,')[1]
}

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

Bonjour




Bonjour,

$user=[ADSI]"LDAP://1*/cn=*ou=*,dc=*,dc=*"
$user
$user.memberof | ForEach-Object {
$ismember =$group.member -contains $user.distinguishedname
$ismember
Mon problème consiste à afficher pour chaque objet, le nom du
groupe.




Le nom des groupes (et non le dn) dont l'utilisateur est membre ?

$user=[adsi]"LDAP://cn=user,ou=test,dc=domain,dc=local"
$user.memberof | % {
$_.split('=,')[1]
}

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


Oui, c'est exacment çà.Merci.Seulement mon problème est plus complexe. J'ai les deux bouts de code suivant :
$user=[ADSI]"LDAP://*/cn=*,ou=*dc=*,dc=*"
$groupe=[ADSI]"LDAP://*/cn=*,ou=*,dc=*,dc=*"
$ismember =$groupe.member -contains $user.distinguishedname
if($ismember)
{
write-host "L'utilisateur appartient au groupe"
}
else
{
write-host "L'utilisateur n'appartient pas au groupe"
}

#et

$i.GetDirectoryEntry().memberof | ForEach-Object {
$grp=[ADSI]"LDAP://$($_)"
$grp.member.add($($j.GetDirectoryEntry().distinguishedname))
$grp.setinfo()
#Je souhaite ajouter les membres un par un si le deuxième utilisateur n'y appartient pas.
Merci
Avatar
Gilles LAURENT [MVP]
"dav8669" wrote:

$i.GetDirectoryEntry().memberof | ForEach-Object {
$grp=[ADSI]"LDAP://$($_)"
$grp.member.add($($j.GetDirectoryEntry().distinguishedname))
$grp.setinfo()
#Je souhaite ajouter les membres un par un si le deuxième utilisateur n'y
appartient pas.



J'ai compris la problématique.
Dans l'exemple ci-dessous, j'ai substitué :

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

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

$user1.memberof | % {
$grp=[ADSI]"LDAP://$($_)" # bind
# une exception sera générée lors de l'appel à la méthode SetInfo
# si user2 est déjà membre du groupe
# on vérifie donc l'appartenance de user2 au groupe
if ($grp.member -notcontains $user2.distinguishedname) {
# user2 n'est pas membre du groupe donc on l'ajoute
$grp.member.add($($user2.distinguishedname))
$grp.setinfo()
}
}

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

$i.GetDirectoryEntry().memberof | ForEach-Object {
$grp=[ADSI]"LDAP://$($_)"
$grp.member.add($($j.GetDirectoryEntry().distinguishedname))
$grp.setinfo()
#Je souhaite ajouter les membres un par un si le deuxième utilisateur
n'y
appartient pas.




J'ai compris la problématique.
Dans l'exemple ci-dessous, j'ai substitué :

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

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

$user1.memberof | % {
$grp=[ADSI]"LDAP://$($_)" # bind
# une exception sera générée lors de l'appel à la
méthode SetInfo
# si user2 est déjà membre du groupe
# on vérifie donc l'appartenance de user2 au groupe
if ($grp.member -notcontains $user2.distinguishedname) {
# user2 n'est pas membre du groupe donc on l'ajoute
$grp.member.add($($user2.distinguishedname))
$grp.setinfo()
}
}

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


Quand je teste séparément, cela fonctionne sans problème.
En revanche quand je l'insère dans mon programme général, il me met une erreur unexpected token 'o' in expression or statement et le script est bloqué. J'ai bien récupéré mes utilisateurs. Je suis sous powershell v2
Bien entendu mon programme général fonctionnait avant. Je ne peux pas poster tout le code ici, il y en a trop.
Merci
Avatar
dav8669
dav8669 a écrit le 12/01/2009 à 09h36 :
Bonjour,
J'ai plusieurs groupes et je voudrais tester pour chaque groupe que
l'utilisateur appartient au groupe.
Merci


Ok problème réglé après coup. Merci de ne pas tenir compte du dernier message.
Peut-on détruire ou éditer un message sur ce forum?
Avatar
Gilles LAURENT [MVP]
"dav8669" wrote:

Ok problème réglé après coup. Merci de ne pas tenir compte du dernier message.
Peut-on détruire ou éditer un message sur ce forum?



Non mais ce n'est pas grave.
Le tout est que votre script fonctionne maintenant ;-)

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