Question
[Résolu]récupération des groupes
- olivia
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 75
- Remerciements reçus 0
il y a 15 ans 3 mois #8171
par olivia
[Résolu]récupération des groupes a été créé par olivia
Bonjour,
j'ai un problème...
J'arrive à récupèree le listing des groupes existants via une listbox
En récupérant seulement le nom des groupes par contre quand je veux intégré un utilisateur a un groupe , j'ai une erreur car j'arrive pas à récupérer la valeur complète permettant la connection au groupe sélectionné via la listbox.
voici un morceau de mon code:
###################################################
###fonction décomposition pour récuperer juste le nom ###
function decomp($chaine){
$fin=$chaine.IndexOf(\",\")
$debut=$chaine.IndexOf(\"=\")+1
$chaine=$chaine.Substring($debut,$($fin-$debut))
return $chaine
}
###################################################
###fonction permettant de remplir listbox Groupe###
function listgroup{
#requête sur l'object group
$reqgroupe = \"(&(objectCategory=group))\"
#connexion à l'active directory
$connect = [ADSI]\"LDAP://dc=$domain,dc=$zone\"
#création de l'objet permettant de chercher dans l'AD
$search = new-object system.directoryservices.directorysearcher $connect,$reqgroupe
#listing de l'AD selon la requête demandé
$groupelist = $search.findall()
# boucle pour parcourir les groupes de l'AD
foreach ($i in $groupelist)
{
$cpt++
# recupère seulement les noms des groupes
$groupe=decomp($i.path)
$val = $i.path # recuperer valeur complete ss forme \"ldap://...\"
#liste les groupes dans la listebox groupe
$listboxgroupe.items.add($groupe)| Out-Null
}
}
#
#
via le code qui liste les groupes de l'aad, par contre je sais par comment récupérer la valeur complète des groupes séléctionnés me permettant de créer des groupes
Je sais que la fonction $listboxgroupe.selecteditems me récupère les valeurs affichés de la listebox , est il possible d'avoir dans les attributs de la listboc une option qui nous permettant d'avoir une nom affiché et sa valeur lié
merci d'avance
sam87<br><br>Message édité par: sam87, à: 17/12/10 09:35
j'ai un problème...
J'arrive à récupèree le listing des groupes existants via une listbox
En récupérant seulement le nom des groupes par contre quand je veux intégré un utilisateur a un groupe , j'ai une erreur car j'arrive pas à récupérer la valeur complète permettant la connection au groupe sélectionné via la listbox.
voici un morceau de mon code:
###################################################
###fonction décomposition pour récuperer juste le nom ###
function decomp($chaine){
$fin=$chaine.IndexOf(\",\")
$debut=$chaine.IndexOf(\"=\")+1
$chaine=$chaine.Substring($debut,$($fin-$debut))
return $chaine
}
###################################################
###fonction permettant de remplir listbox Groupe###
function listgroup{
#requête sur l'object group
$reqgroupe = \"(&(objectCategory=group))\"
#connexion à l'active directory
$connect = [ADSI]\"LDAP://dc=$domain,dc=$zone\"
#création de l'objet permettant de chercher dans l'AD
$search = new-object system.directoryservices.directorysearcher $connect,$reqgroupe
#listing de l'AD selon la requête demandé
$groupelist = $search.findall()
# boucle pour parcourir les groupes de l'AD
foreach ($i in $groupelist)
{
$cpt++
# recupère seulement les noms des groupes
$groupe=decomp($i.path)
$val = $i.path # recuperer valeur complete ss forme \"ldap://...\"
#liste les groupes dans la listebox groupe
$listboxgroupe.items.add($groupe)| Out-Null
}
}
#
#
via le code qui liste les groupes de l'aad, par contre je sais par comment récupérer la valeur complète des groupes séléctionnés me permettant de créer des groupes
Je sais que la fonction $listboxgroupe.selecteditems me récupère les valeurs affichés de la listebox , est il possible d'avoir dans les attributs de la listboc une option qui nous permettant d'avoir une nom affiché et sa valeur lié
merci d'avance
sam87<br><br>Message édité par: sam87, à: 17/12/10 09:35
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 15 ans 3 mois #8173
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:récupération des groupes
Pour intégrer un utilisateur donné à chacun des groupes présents dans ton domaine, tu peux utiliser le code suivant :
[code:1]
#connexion à l'active directory
$connect = [ADSI]\"LDAP://dc=$domain,dc=$zone\"
#création de l'objet permettant de chercher dans l'AD
$search = new-object system.directoryservices.directorysearcher $connect
# requête sur l'object Group
$search.filter = \"(objectCategory=group)\"
$groupelist = $search.FindAll()
# requête sur l'objet User dont le samAccountName est sam87
$search.filter = \"(&(objectCategory=User)(samaccountname=sam87))\"
$user = $search.FindOne()
foreach ($groupe in $groupelist)
{
$adgroup = [ADSI]$groupe.Path
$adgroup.Add($user)
}
[/code:1]
Est-ce que ça répond à ta question ?
[code:1]
#connexion à l'active directory
$connect = [ADSI]\"LDAP://dc=$domain,dc=$zone\"
#création de l'objet permettant de chercher dans l'AD
$search = new-object system.directoryservices.directorysearcher $connect
# requête sur l'object Group
$search.filter = \"(objectCategory=group)\"
$groupelist = $search.FindAll()
# requête sur l'objet User dont le samAccountName est sam87
$search.filter = \"(&(objectCategory=User)(samaccountname=sam87))\"
$user = $search.FindOne()
foreach ($groupe in $groupelist)
{
$adgroup = [ADSI]$groupe.Path
$adgroup.Add($user)
}
[/code:1]
Est-ce que ça répond à ta question ?
Connexion ou Créer un compte pour participer à la conversation.
- olivia
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 75
- Remerciements reçus 0
il y a 15 ans 3 mois #8174
par olivia
Réponse de olivia sur le sujet Re:récupération des groupes
Merci de ta réponse mais non en fait je cherche à adhéré un utilisateur précédement crée a un groupe .
Mais le problème n'est pas l'adhésion a un groupe mais plutôt à trouver un moyen car je sélectionne un groupe dans la listebox \"helpgroupe\" . Je récupère bien les les groupes sélectionnés mais mon problème est que je cherche une solution pour lié \"helpgroupe\" par exemple à ca valeur complète : ldap://cn=helpgroupe....\"
pour me permettre d'adhéré au groupes sélectionné
olivia
Mais le problème n'est pas l'adhésion a un groupe mais plutôt à trouver un moyen car je sélectionne un groupe dans la listebox \"helpgroupe\" . Je récupère bien les les groupes sélectionnés mais mon problème est que je cherche une solution pour lié \"helpgroupe\" par exemple à ca valeur complète : ldap://cn=helpgroupe....\"
pour me permettre d'adhéré au groupes sélectionné
olivia
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 15 ans 3 mois #8176
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:récupération des groupes
Ok, je vois. Tu peux :
- Créer une CheckedListBox
- Lui passer la liste des groupes (en filtrant la liste sur la propriété name pour un affichage clair)
- En sortie, récupérer les CheckedIndices de la listbox qui pointeront sur les éléments de la liste de départ
Voici un bout de code qui illustre ça :
[code:1]
$adds = [ADSI]''
$searcher = new-object DirectoryServices.DirectorySearcher $adds
$searcher.Filter = \"(objectCategory=Group)\"
$GroupList = $searcher.FindAll()
Add-Type -Assembly System.Windows.Forms
$form = new-object Windows.Forms.Form
$form.Size = new-object Drawing.Size @(400,500)
$form.Text = \"Sélectionnez les groupes de votre choix\"
$listbox = new-object Windows.Forms.CheckedListBox
$listbox.CheckOnClick = $true
$listbox.Dock = \"Fill\"
$listBox.Items.AddRange($($GroupList | foreach {$_.properties.name}))
$buttonPanel = new-object Windows.Forms.Panel
$buttonPanel.Size = new-object Drawing.Size @(400,30)
$buttonPanel.Dock = \"Bottom\"
$cancelButton = new-object Windows.Forms.Button
$cancelButton.Text = \"Annuler\"
$cancelButton.DialogResult = \"Cancel\"
$cancelButton.Top = $buttonPanel.Height - $cancelButton.Height - 5
$cancelButton.Left = $buttonPanel.Width - $cancelButton.Width - 10
$cancelButton.Anchor = \"Right\"
$okButton = new-object Windows.Forms.Button
$okButton.Text = \"Ok\"
$okButton.DialogResult = \"Ok\"
$okButton.Top = $cancelButton.Top
$okButton.Left = $cancelButton.Left - $okButton.Width - 5
$okButton.Anchor = \"Right\"
$buttonPanel.Controls.Add($okButton)
$buttonPanel.Controls.Add($cancelButton)
$form.Controls.Add($listBox)
$form.Controls.Add($buttonPanel)
$form.AcceptButton = $okButton
$form.CancelButton = $cancelButton
$form.Add_Shown( { $form.Activate() } )
$result = $form.ShowDialog()
if($result -eq \"Ok\"«»)
{
$GroupSelection = @()
foreach($index in $listBox.CheckedIndices)
{
$GroupSelection += $GroupList[$index]
}
$GroupSelection
}
[/code:1]
En fin de code, $GroupSelection contient les groupes sélectionnés. Ce sont bien les objets AD, pas seulement les noms des groupes. Tu peux alors accéder à leur propriété Path.
- Créer une CheckedListBox
- Lui passer la liste des groupes (en filtrant la liste sur la propriété name pour un affichage clair)
- En sortie, récupérer les CheckedIndices de la listbox qui pointeront sur les éléments de la liste de départ
Voici un bout de code qui illustre ça :
[code:1]
$adds = [ADSI]''
$searcher = new-object DirectoryServices.DirectorySearcher $adds
$searcher.Filter = \"(objectCategory=Group)\"
$GroupList = $searcher.FindAll()
Add-Type -Assembly System.Windows.Forms
$form = new-object Windows.Forms.Form
$form.Size = new-object Drawing.Size @(400,500)
$form.Text = \"Sélectionnez les groupes de votre choix\"
$listbox = new-object Windows.Forms.CheckedListBox
$listbox.CheckOnClick = $true
$listbox.Dock = \"Fill\"
$listBox.Items.AddRange($($GroupList | foreach {$_.properties.name}))
$buttonPanel = new-object Windows.Forms.Panel
$buttonPanel.Size = new-object Drawing.Size @(400,30)
$buttonPanel.Dock = \"Bottom\"
$cancelButton = new-object Windows.Forms.Button
$cancelButton.Text = \"Annuler\"
$cancelButton.DialogResult = \"Cancel\"
$cancelButton.Top = $buttonPanel.Height - $cancelButton.Height - 5
$cancelButton.Left = $buttonPanel.Width - $cancelButton.Width - 10
$cancelButton.Anchor = \"Right\"
$okButton = new-object Windows.Forms.Button
$okButton.Text = \"Ok\"
$okButton.DialogResult = \"Ok\"
$okButton.Top = $cancelButton.Top
$okButton.Left = $cancelButton.Left - $okButton.Width - 5
$okButton.Anchor = \"Right\"
$buttonPanel.Controls.Add($okButton)
$buttonPanel.Controls.Add($cancelButton)
$form.Controls.Add($listBox)
$form.Controls.Add($buttonPanel)
$form.AcceptButton = $okButton
$form.CancelButton = $cancelButton
$form.Add_Shown( { $form.Activate() } )
$result = $form.ShowDialog()
if($result -eq \"Ok\"«»)
{
$GroupSelection = @()
foreach($index in $listBox.CheckedIndices)
{
$GroupSelection += $GroupList[$index]
}
$GroupSelection
}
[/code:1]
En fin de code, $GroupSelection contient les groupes sélectionnés. Ce sont bien les objets AD, pas seulement les noms des groupes. Tu peux alors accéder à leur propriété Path.
Connexion ou Créer un compte pour participer à la conversation.
- olivia
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 75
- Remerciements reçus 0
il y a 15 ans 3 mois #8177
par olivia
Réponse de olivia sur le sujet Re:récupération des groupes
Je te remercies c'est oki par contre peut être une erreur de ma part , mais quand je fais $groupselection.path celui-ci ne m'affiche rien !!!
Olivia
Olivia
Connexion ou Créer un compte pour participer à la conversation.
- olivia
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 75
- Remerciements reçus 0
il y a 15 ans 3 mois #8179
par olivia
Réponse de olivia sur le sujet Re:récupération des groupes
J'ai réussi à récupérer les valeurs
Mais toujours un problème, je n'arrives pas à me connecter sur le(s) groupe(s) choisi(s).
#récupérer la valeur de connection
$GroupSelection += $GroupList[$index].path
$taille = $groupselection.count
$i=0
do
{
#connection à l'objet groupe
$objgrp = [ADSI] $groupeselection[$i]
#initialise la valeur de l'objet utilisateur
$utilisateur = \"CN=ftadmin,ou=test,DC=test,DC=lan\"
#intégration de l'utilisateur dans un ou des groupes
$objgrp.member += $utilisateur
#prise en compte de la modification de l'objet groupe dans l'AD
$objgrp.psbase.commitchanges()
$i++
}until($i -gt $taille)
le message d'erreur afiché:
le groupe 0
:
LDAP://CN=Opérateurs de configuration réseau,CN=Builtin,DC=test,DC=lan
Impossible d'indexer dans un tableau Null.
Au niveau de C:\Documents and Settings\Administrateur\Bureau\0212.ps1 : 66 Caractère : 35
+ $objgrp = [ADSI] $groupeselection[ <<<< $i]
+ CategoryInfo : InvalidOperation: (0:Int32) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
La propriété « member » est introuvable sur cet objet ; assurez-vous qu'elle existe et qu'elle peut être définie.
Au niveau de C:\Documents and Settings\Administrateur\Bureau\0212.ps1 : 71 Caractère : 9
+ $objgrp. <<<< member += $utilisateur
+ CategoryInfo : InvalidOperation: (member:String) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound
Vous ne pouvez pas appeler de méthode sur une expression ayant la valeur Null.
Au niveau de C:\Documents and Settings\Administrateur\Bureau\0212.ps1 : 73 Caractère : 29
+ $objgrp.psbase.commitchanges <<<< ()
+ CategoryInfo : InvalidOperation: (commitchanges:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Mais toujours un problème, je n'arrives pas à me connecter sur le(s) groupe(s) choisi(s).
#récupérer la valeur de connection
$GroupSelection += $GroupList[$index].path
$taille = $groupselection.count
$i=0
do
{
#connection à l'objet groupe
$objgrp = [ADSI] $groupeselection[$i]
#initialise la valeur de l'objet utilisateur
$utilisateur = \"CN=ftadmin,ou=test,DC=test,DC=lan\"
#intégration de l'utilisateur dans un ou des groupes
$objgrp.member += $utilisateur
#prise en compte de la modification de l'objet groupe dans l'AD
$objgrp.psbase.commitchanges()
$i++
}until($i -gt $taille)
le message d'erreur afiché:
le groupe 0
:
LDAP://CN=Opérateurs de configuration réseau,CN=Builtin,DC=test,DC=lan
Impossible d'indexer dans un tableau Null.
Au niveau de C:\Documents and Settings\Administrateur\Bureau\0212.ps1 : 66 Caractère : 35
+ $objgrp = [ADSI] $groupeselection[ <<<< $i]
+ CategoryInfo : InvalidOperation: (0:Int32) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
La propriété « member » est introuvable sur cet objet ; assurez-vous qu'elle existe et qu'elle peut être définie.
Au niveau de C:\Documents and Settings\Administrateur\Bureau\0212.ps1 : 71 Caractère : 9
+ $objgrp. <<<< member += $utilisateur
+ CategoryInfo : InvalidOperation: (member:String) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound
Vous ne pouvez pas appeler de méthode sur une expression ayant la valeur Null.
Au niveau de C:\Documents and Settings\Administrateur\Bureau\0212.ps1 : 73 Caractère : 29
+ $objgrp.psbase.commitchanges <<<< ()
+ CategoryInfo : InvalidOperation: (commitchanges:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.043 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu]récupération des groupes