Question Foreach : optimisation des performances
- Berfini
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 86
- Remerciements reçus 0
il y a 16 ans 2 mois #648
par Berfini
Gaby
Foreach : optimisation des performances a été créé 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.
Merci d'avance.<br><br>Message édité par: Arnaud, à: 23/07/07 10:44
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.

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.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 16 ans 2 mois #649
par Arnaud Petitjean
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 ou d'un conseil ?
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
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 ou d'un conseil ?
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 16 ans 2 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
[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.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 16 ans 2 mois #664
par Arnaud Petitjean
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 ou d'un conseil ?
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
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 ou d'un conseil ?
Connexion ou Créer un compte pour participer à la conversation.
- Berfini
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 86
- Remerciements reçus 0
il y a 16 ans 2 mois #665
par Berfini
Gaby
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 \"janel\" ^^
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
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

Gaby
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 16 ans 2 mois #666
par Arnaud Petitjean
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 ou d'un conseil ?
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 \"Measure-Command\".
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
D'ailleurs te propose, si tu peux, de mesurer le temps d'exécution de ton script avec la commandlette \"Measure-Command\".
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 ou d'un conseil ?
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.056 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- Foreach : optimisation des performances