Question Powershell optimisation des tableaux

Plus d'informations
il y a 11 ans 4 mois #18434 par hemon
Bonjour,

Désolé pour les problèmes d'accents la ou je travail il n'y que des claviers qwerty. :dry:

Apres plusieurs années a travailler sous Unix je me suis remis a travailler sur Powershell et par moment c'est un vrai bonheur. (manipuler les dates c'est magique avec PS)

J'analyse actuellement les groupes et les utilisateurs AD de mon entreprise et il y en a beaucoup.

Pour ce faire je récupère la liste des utilisateurs et des groupes(avec Get-ADUser et Get-ADGroup) et j'exécute un algo récursif sur la liste des groupes. Celui-ci construit une arborescence de l'AD et applique en passant diverse fonctions pour détecter les anomalies.

Lors de la construction de l'arbo je réalise des lookup a partir de l'attribut \"Members\" d'un groupe AD avec les listes des Users et Groupes pour récupérer des Objets ADUser/ADGroup avec toutes les propriétés.

Et c'est plutôt lent !

D'où ma question:

Existe t'il des structures sous PS/.Net permettant de réaliser des recherche plus efficaces ?

Par exemple si je trie ma liste d'ADUsers par SamAccountName est il possible de profiter du trie pour gagner en performance ? (J'effectue mes recherches sur cet attribut)

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

Plus d'informations
il y a 11 ans 4 mois #18435 par Laurent Dardenne
Salut,
bilbao2 écrit:

Et c'est plutôt lent !

Quel structure utilises-tu actuellement ?
Est-ce la structure qui 'est lente' ou l'accès aux données ?
Une mise en cache est-elle possible ?

bilbao2 écrit:

Par exemple si je trie

Comment ? avec Sort-object ?
Sous quelle version de PS et avec quel OS ?

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 4 mois #18438 par hemon
J'utilise deux tableaux d'objets que je récupère en utilisant les commandes get-aduser et get-adgroup.

En effet, afin d'éviter de spammer en requêtes LDAP j'effectue deux requêtes qui récupèrent tous les users/groupes qui m'intéressent.

Mon algo va ensuite effectuer un grand nombre de recherches dans ces tableaux.

Est-il possible d'optimiser les recherches en utilisant des fonctionnalités .Net/Powershell? (autre type de liste, autre type d'objet, fonction de recherches, etc...)

Par exemple si j'effectue un trie sur un tableau sur un attribut (ex:samAccountName). Si je fais ensuite une recherche sur cet attribut, il existe des algo qui évitent de parcourir la totalité du tableau. (Si je cherche un mot commençant par la lettre \"z\", l'algo ne va pas parcourir tout le tableau en commençant par les mots dont la première lettre est \"a\"

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

Plus d'informations
il y a 11 ans 4 mois #18439 par Laurent Dardenne
Tu peux étudier ceci , ensuite reste les arbres binaires .

Bon, ce n'est pas à coder avec PS, mais a utiliser via une librairie, dans ton cas de savoir manipuler la création, l'insertion, la recherche et la destruction suffit.

La pioche est ici :P
Ou sur des référentiels projet tels que Codeplex, Github. La plupart nécessiteront PS V3 et >

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 4 mois #18446 par hemon
J'ai transformé les tableaux de users et groupes en dictionnaire en utilisant le DN comme clé... et c'est beaucoup plus rapide pour accéder aux valeurs.

[code:1]$usersDict = @{}
$users = Get-ADUser -Filter {DistinguishedName -like \"*\"}
$users | % { $usersDict.add($_.DistinguishedName,$_) }[/code:1]

Je vais jeter un œil sur les arbres, mais leurs utilisation semble plus difficile que prévu.

Merci<br><br>Message édité par: bilbao2, à: 20/11/14 15:52

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

Plus d'informations
il y a 11 ans 4 mois #18449 par Laurent Dardenne
bilbao2 écrit:

Je vais jeter un œil sur les arbres, mais leurs utilisation semble plus difficile que prévu.

Peut être. L'usage d'un arbre binaire est intéressant si la volumétrie est importante, mais dans ce cas on peut aussi se demander si un SGBD n'est pas préférable.
Il 'faut juste' transformer la structure de données en un MCD équivalent.
Mais là, en dehors du requêtage, point de Powershell ;)<br><br>Message édité par: Laurent Dardenne, à: 20/11/14 17:11

Tutoriels PowerShell

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

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