Question Liste groupes par utilisateurs

Plus d'informations
il y a 5 ans 3 mois #27991 par rhiwotar
Bonjour à tous,

Je viens de bricoler ça à la demande d'un collègue qui voulais connaitre les utilisateurs actifs sur office365 et à quelle liste de diffusions ils font partis.
Le code marche mais il mets beaucoup trop de temps, (je l'ai lancé à 15h09, il tourne encore à 15h35)
j'ai moins de 300 users et 64 groupes,
Avez-vous une idée pour optimiser cela??


Merci d'avance!

[code:1]
connect-msolservice

Clear-Content \"c:\ListeMailsGroupes.txt\"

#fonction ecriture de fichier fichier
function liste($info){
Add-Content $info -Path \"c:\ListeMailsGroupes.txt\"
}
#Genere une liste d'utilisateurs
$users = Get-MsolUser -All | Where-Object {$_.islicensed -like \"true\"} |sort displayname
#Genere une liste de groupe
$Groups = Get-MsolGroup -all |Where-Object {$_.grouptype -like \"mail*\"}|sort displayname

foreach($user in $users){
#affiche l'utilisateur en cours
liste($user.displayname)

foreach($group in $groups){
#liste les membres du groupe en cours
$test = Get-MsolGroupMember -groupobjectid $group.objectid
#Si la variable n'est pas nulle et que l'utilisateur est membre
if (($test -notlike $null) -and ($test.displayname.contains($user.DisplayName))){
#Affiche le groupe
liste(\" \" + $group.displayname)
#ligne de test
#write-host $group.displayname \" : Oui\"
}
else{
#ligne de test
#write-host $group.displayname \" : Non\"
}
}
}
[/code:1]

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

Plus d'informations
il y a 5 ans 3 mois #28001 par Sinjk
Réponse de Sinjk sur le sujet Re:Liste groupes par utilisateurs
Hello,

As tu essayé d'ajouter tes résultats dans un .txt au lieu de les afficher directement par un write-host ?
Me semble que l'affichage sur la console prend plus de temps que d'ajouter un resultat vers un fichier texte par exemple.

Bon courage :)

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

Plus d'informations
il y a 5 ans 3 mois #28002 par rhiwotar
Réponse de rhiwotar sur le sujet Re:Liste groupes par utilisateurs
Bonjour,

Les éléments sont bien générés dans un .txt (c'est ma fonction du début) mais là, je l'ai modifier pour l'envoyer dans un csv ou même en write-host, c'est tout aussi long, environ 1h10 pour 300 utilisateurs.

Après, c'est un script que je vais lancer de façon très occasionnel, en soit c'est pas gênant, c'est juste que j'aimerais savoir si c'est optimisable.

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

Plus d'informations
il y a 5 ans 3 mois #28003 par Arnaud Petitjean
Hello Rhiwotar,

Je viens de regarder rapidement ton code et à première vue il m'a l'air tout à fait correct. Je n'ai rien à redire de ce côté-là.

Pour l’accélérer, il serait peut-être intéressant de lister le contenu de chaque groupe dans une table de hachage. Ainsi dans ta boucle foreach, au lieu d'interroger l'AD (ce que tu fais indirectement en utilisant Get-MsolGroupMember), tu accèderais aux tables de hachage et ce serait infiniment plus rapide.

Par contre il va falloir un peu de temps pour peupler tes tables au début de ton script, mais après le temps perdu sera largement compensé. Et plus tu auras d'utilisateurs, plus tu gagneras de temps.

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 5 ans 3 mois #28005 par rhiwotar
Réponse de rhiwotar sur le sujet Re:Liste groupes par utilisateurs
Bonjour,

Connais pas la technique/méthode/truc/sorcelerie du hash, faudrait que je prenne le temps d'y jeter un œil quand je pourrais.

Si mon code est au mieux, alors tant mieux!!

Merci du conseil et bonne journée !

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

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