Question Foreach : optimisation des performances

Plus d'informations
il y a 16 ans 8 mois #648 par Berfini
Bonjour bonjour, c'est encore moi.
Alors mon probleme actuel c'est que j'execute une requete que voila :

[code:1]
$Container = \"OU=Administration,OU=Groups,OU=Exploitation Users,dc=exploitation,dc=****,dc=***\"
$GroupDN = \"CN=\" + $GroupName + \",\" + $Container
$requete = \"LDAP://\" + $GroupDN
$objGroup = [ADSI]$requete
$objGroup.GetInfo
[/code:1]

Et avec le resultat de ma requete, je fais un foreach pour recuperer un a un les informations

[code:1]
foreach ($objMember in $objGroup.Members) {
$requete2 = \"LDAP://\" + $DCtoUse + \"/\" + $objMember.distinguishedName
$objUser = new-object System.DirectoryServices.DirectoryEntry $requete2
$objUser.psbase.msExchRecipLimit = $NbDestinataire
$objUser.setinfo
$objuser.CommitChanges()
$objMember.distinguishedName | out-File $sNomFichier
(\" \"«») | out-File $sNomFichier
[/code:1]

Mais si je teste avec un write-host, je me rend compte que $objmember est vide. :s

Merci d'avance.<br><br>Message édité par: Arnaud, à: 23/07/07 10:44

Gaby

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

Plus d'informations
il y a 16 ans 8 mois #649 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Re:Foreach
Bonjour Gaby,

Je n'ai pas d'AD sous la main mais je pense que ton objet $objgroup.members n'est pas une collection d'objets.

Essaye de faire un get-member dessus pour voir quelles sont ses propriétés et méthodes.

D'autre part j'ai déjà fait un script similaire qui liste le contenu d'un groupe, peut-être pourrais tu t'en inspirer ? C'est ici: powershell-scripting.com/index.php?optio...id=119&Itemid=71

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

Plus d'informations
il y a 16 ans 8 mois #659 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Foreach
En complément de la réponse d'Arnaud, j'ajouterai que les performances d'une boucle comme suit ne sont pas optimales:
[code:1]
foreach ($object in $collection)
{...}[/code:1]
Dans les cas où la collection contient un nombre important d'objets, on aura plutôt intérêt à utiliser la forme suivante:
[code:1]
$collection | foreach {...}[/code:1]
Le gain est particulièrement important si vous mettez à la place de $collection la suite de commandes qui génèrent la collection.

Pour plus de détails vous pouvez lire le billet que j'avais publié il y a quelques semaines:

janel.spaces.live.com/blog/cns!9B5AA3F6FA0088C2!304.entry

Janel<br><br>Message édité par: janel, à: 17/07/07 12:55

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

Plus d'informations
il y a 16 ans 8 mois #664 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Re:Foreach
Très intéressant ton billet sur l'optimisation du foreach janel !

Mais dans le cas de Gaby, y a t'il vraiment un gain de performance à tirer en utilisant le pipeline, dans la mesure où tous les objets doivent être parcourus (contrairement à l'exemple que tu as pris sur ton blog) ?

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

Plus d'informations
il y a 16 ans 8 mois #665 par Berfini
Réponse de Berfini sur le sujet Re:Foreach
J'ai fait une copie de mon script et dans la copie j'y ai mis le foreach façon \&quot;janel\&quot; ^^
Des que je serai sur la prod (cette aprem peut etre) je testerai les deux, et je vous dirai si l'une marche mieux que l'autre, ou au moins si l'une marche :p

Gaby

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

Plus d'informations
il y a 16 ans 8 mois #666 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Re:Foreach
Très bonne idée Gaby.

D'ailleurs te propose, si tu peux, de mesurer le temps d'exécution de ton script avec la commandlette \&quot;Measure-Command\&quot;.

Exemple :
[code:1] Measure-Command -expression { for ($i=1;$i -lt 100;$i++){$i} }

Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 4
Ticks : 43092
TotalDays : 4.9875E-08
TotalHours : 1.197E-06
TotalMinutes : 7.182E-05
TotalSeconds : 0.0043092
TotalMilliseconds : 4.3092

[/code:1]

Comme ça on aura une idée concrète du gain de performances obtenu entre les 2 boucles.

Arnaud<br><br>Message édité par: Arnaud, à: 17/07/07 14:39

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

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