Flash info

"Problems cannot be solved by the same level of thinking that created them."

- Albert Einstein
 
Accueil arrow Forum

Bienvenue sur le forum PowerShell-Scripting.com

 
Gaby
Utilisateur

PowerShelleur Amateur
Messages: 86
graphgraph
Karma: 3  
Active Directory : boucle Foreach - 22/07/07 12:08 Bonjour Bonjour,

Je suis face a un petit probleme : grace a une boucle foreach j'ai recupéré la liste des membres d'un groupe d'une OU, et je voudrai afficher les propriétés AD telles que CN, Name et DistinguishedName.

Est-ce que quelqu'un sait faire svp ?

Message édité par: Arnaud, à: 23/07/07 10:40

Message édité par: Gaby, à: 23/07/07 11:09
Gaby
  | | L'administrateur a désactivé l'accés public en écriture.
Robin
Admin

Administrateur
Messages: 262
graphgraph
Karma: 8  
Re:Active Directory - 22/07/07 12:29 Salut Gaby

il faut faire comme cela :

Code:

  foreach ($membre in $liste) { $membre.properties["CN"] $membre.properties["DistinguishedName"] }



tiens nous au courant ...


Rob
Robin MVP PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
Gaby
Utilisateur

PowerShelleur Amateur
Messages: 86
graphgraph
Karma: 3  
Re:Active Directory - 22/07/07 23:52 Merci beaucoup ! Gaby
  | | L'administrateur a désactivé l'accés public en écriture.
Gaby
Utilisateur

PowerShelleur Amateur
Messages: 86
graphgraph
Karma: 3  
Re:Active Directory - 23/07/07 10:09 Euh je viens de tester ça ne marche pas
Si je met une ligne comme write-host "cn" = $membre.properties["cn"]
sa ne me retourne meme pas une ligne vide.

Je vous poste mon code :
Code:

         # Boucle de lecture du jeu de résutat     $erroractionpreference "SilentlyContinue"     $GroupDN "CN=" $GroupName "," $Container     Write-host "GroupDN = " $groupdn     $requete "LDAP://" $GroupDN     Write-host "Requete = " $requete     $objMembers = List-UserG $requete     Write-host "Membres = " $objMembers     foreach ($objmember in $objMembers) {         Write-host "Membre = " $objmember         Write-host $objmember.properties["distinguishedName"]         Write-host "CN = " $objmember.properties["CN"]         Write-host "Name = " $objmember.properties["name"]         $requete2 "LDAP://" $DCtoUse "/" $objmember.properties["distinguishedName"]         $objUser = new-object System.DirectoryServices.DirectoryEntry $requete2         $objUser.psbase.msExchRecipLimit $NbDestinataire         $objuser.CommitChanges()     }



Edit : j'ai vu dans la bibliothèque de scripts un script ou il y a marqué .properties.lastlogon
J'ai essaye et une fois encore sa ne marche pas, mais la au moins sa me met une ligne vierge.

Ce script est sensé modifier la valeur maximale de destinataires dans Exchange 2003 pour les utilisateurs d'un groupe donné.

Message édité par: Gaby, à: 23/07/07 11:22
Gaby
  | | L'administrateur a désactivé l'accés public en écriture.
Robin
Admin

Administrateur
Messages: 262
graphgraph
Karma: 8  
Re:Active Directory - 23/07/07 10:44 Hello

Tu as le problème que pour la propriété CN ???
Robin MVP PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
Gaby
Utilisateur

PowerShelleur Amateur
Messages: 86
graphgraph
Karma: 3  
Re:Active Directory - 23/07/07 10:44 J'ai testé le script qui affiche la derniere date de log d'un utilisateur et la le lastlogon fonctionne.

Cette histoire étant en train de me rendre a moitié folle, quelqu'un pourrait il m'expliquer comme adapter ce script a mon cas svp ?

Edit pour repondre a robin : non, lastlogon, name et distinguishedname ne fonctionne pas non plus.

Message édité par: Gaby, à: 23/07/07 11:46
Gaby
  | | L'administrateur a désactivé l'accés public en écriture.
Robin
Admin

Administrateur
Messages: 262
graphgraph
Karma: 8  
Re:Active Directory - 23/07/07 10:59 Je n'ai pas AD sous la main là, mais lorsque tu fais
Code:

 $objMembers


tu as bien la liste de tes membres ?


tu peux aussi changer la valeur de $erroractionpreference de façon à mieux voir les erreurs.


Rob
Robin MVP PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
janel
Admin

Administrateur
Messages: 576
graphgraph
Karma: 31  
Re:Active Directory - 23/07/07 11:05 Gaby, peux-tu également partager le code que tu utilises pour la fonction ou le script List-UserG? Cela nous permettrait d'essayer de reproduire le problème et mieux t'aider à le résoudre.

Janel
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1319
graphgraph
Karma: 45  
Re:Active Directory - 23/07/07 11:22 Bonjour Gaby,

Le problème c'est qu'en mode
Code:

 $erroractionpreference "SilentlyContinue"

tu ne peux pas voir les erreurs. Je te conseilles, tant que tu es dans la phase de mise au point de ton script, de rester en mode "continue" par défaut.

Donc, déjà en affichant les messages tu auras plus de chances de comprendre ce qui ne va pas (et nous aussi en même temps )

Arnaud
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
Gaby
Utilisateur

PowerShelleur Amateur
Messages: 86
graphgraph
Karma: 3  
Re:Active Directory - 23/07/07 11:52 Voici ma fonction :

Code:

  Function List-UserG ([string$path# liste les utilisateurs d'un groupe {     if (! $path)     {         throw "Vous devez spécifier le chemin d'acces de l`'OU."     }     else     {         $groupe = ([ADSI$path)         return $groupe.member      } }

Gaby
  | | L'administrateur a désactivé l'accés public en écriture.
Gaby
Utilisateur

PowerShelleur Amateur
Messages: 86
graphgraph
Karma: 3  
Re:Active Directory - 23/07/07 12:47 En fait je pense avoir trouvé une solution a mon probleme :
Avec ce code que j'ai recupéré dans la bibli de scripts
Code:

  $ldapQuery "(&(objectCategory=user))" $de = new-object system.directoryservices.directoryentry $ads = new-object system.directoryservices.directorysearcher -argumentlist $de,$ldapQuery $complist $ads.findall() foreach ($i in $complist) {write-host $i.properties.distinguishedname



Le seul probleme qui subsiste, c'est que cette methode ne liste pas tous les utilisateurs.
Exemple : quand je me connectes, j'ouvre ma session sous etude_dev et mon script ne m'affiche que les users de etude_dev. Si je me log sous Exploitation, sa me liste ceux d'exploitation ...

Comme faire pour choisir ?
Gaby
  | | L'administrateur a désactivé l'accés public en écriture.
janel
Admin

Administrateur
Messages: 576
graphgraph
Karma: 31  
Re:Active Directory - 23/07/07 13:49 Par défaut la construction d'un nouvel objet System.DirectoryServices.DirectoryEntry utilise le domaine de l'utilisateur comme chemin de base.

Si tu veux modifier cela, tu peux préciser un autre chemin LDAP, soit à la création de l'objet soit après en modifiant sa propriété DistinguishedName. A la création, tu devrais pouvoir le faire en écrivant par exemple:

Code:

 $de = new-object system.directoryservices.directoryentry "LDAP://DC=masociete,DC=com"


Janel
  | | L'administrateur a désactivé l'accés public en écriture.
Gaby
Utilisateur

PowerShelleur Amateur
Messages: 86
graphgraph
Karma: 3  
Re:Active Directory - 23/07/07 14:30 nikel janel, sa fait un moment je ke bidouillai pour essayer de forcer sa valeur sans succes.

Maintenant il me reste l'ultime probleme pour configurer le nombre max de destinataires sous exchange 2003 : la propriété "msExchRecipLimit".

.psbase.msExchRecipLimit ne fonctionne pas non plus.
Gaby
  | | L'administrateur a désactivé l'accés public en écriture.
janel
Admin

Administrateur
Messages: 576
graphgraph
Karma: 31  
Re:Active Directory - 23/07/07 20:06 Je n'ai pas accès à un AD/Exchange ce soir, je regarderai demain matin si je peux trouver la référence à cette propriété.

Janel
  | | L'administrateur a désactivé l'accés public en écriture.
janel
Admin

Administrateur
Messages: 576
graphgraph
Karma: 31  
Re:Active Directory - 24/07/07 21:02 Bon, j'ai passé un peu de temps à gratter sur le sujet, sans être sûr à 100% d'en savoir vraiment plus... On touche là à un des très gros défauts de PowerShell v1 à mon avis. Son implémentation d'ADSI rend la découverte des objets beaucoup trop compliquée.

Passons... En gros, tu devrais pouvoir trouver la propriété sous une de ces arborescences:

$i.properties.msExchRecipLimit
$i.psbase.msExchRecipLimit

Si ni l'une ni l'autre ne marche, on peut douter de l'existence de cette propriété. Es-tu sûre que tes Utilisateurs ont cet attribut d'activé dans l'AD? L'attribut peut être disponible dans le schéma de l'AD mais ne pas avoir été activé sur les objets eux-mêmes.

Si tu en es sûre, je te suggère d'nstaller le pack de gestion de l'AD de Quest Software (gratuit):

http://www.quest.com/activeroles-server/arms.aspx

Les commandelettes fournies par Quest permettent un accès à l'AD beaucoup plus simple et performant. Par exemple, la commandelette get-qaduser te permettra de récupérer un utilisateur AD et de parcourir/modifier ses propriétés très facilement.

Si cette solution ne te permet toujours pas d'accéder à la propriété en question alors que tu es absolument sûre qu'elle existe (il faudrait éventuellement t'en assurer avec un script VBScript), il faudra envisager d'ouvrir un bug chez Microsoft. Je t'indiquerai la procédure à suivre si on doit en arriver à cette extrémité.

Janel
  | | L'administrateur a désactivé l'accés public en écriture.
Gaby
Utilisateur

PowerShelleur Amateur
Messages: 86
graphgraph
Karma: 3  
Re:Active Directory - 24/07/07 22:39 D'abord merci Janel du temps que tu passes sur mon probleme.

Ensuite $i.properties.msExchRecipLimit et $i.psbase.msExchRecipLimit ne fonctionnent pas, j'ai deja testé.

De plus, je sais que la propriété existe car j'essaie juste de transcrire un script vbs qui faisait ça en powershell.

J'ai également (depuis cette aprem) telechergé le pack de gestion de l'AD de Quest Software mais je n'ai pas eu le temps de le testé encore.

Je te tiens au courant, et merci encore.
Gaby
  | | L'administrateur a désactivé l'accés public en écriture.
janel
Admin

Administrateur
Messages: 576
graphgraph
Karma: 31  
Re:Active Directory - 24/07/07 23:03 Tu peux partager le script vbs qui marche? Ca peut permettre d'aider à l'adapter en PowerShell, ou d'isoler plus précisément ce qui ne marche pas avec PowerShell.

Janel
  | | L'administrateur a désactivé l'accés public en écriture.
Gaby
Utilisateur

PowerShelleur Amateur
Messages: 86
graphgraph
Karma: 3  
Re:Active Directory - 25/07/07 07:30 Voila le bour de code en question :

Code:

        For each objMember in objGroup.Members         'Wscript.Echo objMember.distinguishedName     'Wscript.Echo objMember.CN     'WScript.echo strMember.name     Set objUser = GetObject("LDAP://" & DCtoUse & "/" & objMember.distinguishedName)     objUser.msExchRecipLimit = NbDestinataire     objUser.setinfo

Gaby
  | | L'administrateur a désactivé l'accés public en écriture.
janel
Admin

Administrateur
Messages: 576
graphgraph
Karma: 31  
Re:Active Directory - 26/07/07 13:01 C'est très curieux, après avoir testé ton code en vbs qui avait l'air de marcher, j'ai retesté sous PowerShell et ça a l'air de marcher également:

Code:

  PS$dn "cn=toto,ou=UserAccounts,dc=maboite,dc=com" PS$dc "mon-dc-01" PS$user = [ADSI]"LDAP://$dc/$dn" PS$user.msExchRecipLimit 1 PS$user.msExchRecipLimit 1


Je n'irai pas jusqu'à confirmer le changement, de toute façon je n'ai pas les droits d'admin sur l'AD auquel je me suis connecté. Mais ce test confirme bien la présence de la propriété, car si j'essaie d'affecter une valeur à une propriété bidon le message d'erreur est sans appel...

Cela dit, la propriété reste cachée lorsque j'énumère les propriétés de l'objet (que ce soit par get-member ou par $user.psobject.properties), et faute de pouvoir faire des tests en aval sur l'éventuel impact de ma modification je ne peux pas prouver que j'ai bel et bien changé sa valeur.

Désolé de ne pouvoir t'aider plus, mais là je sèche .

Janel
  | | L'administrateur a désactivé l'accés public en écriture.
© 2020 PowerShell-Scripting.com