Question Extraction users et groupes imbriqués

Plus d'informations
il y a 11 ans 5 mois #18243 par Alban LAMBERTY
Bonjour à tous,

tout d'abord merci pour ce site mine d'or et à tous ceux qui donnent de leur temps pour aider ceux qui comme moi débutent.

Depuis plusieurs jours je m'arrache les cheveux à essayer d'adapter des scripts trouvés ici et ailleurs pour faire ce que je veux mais je n'y arrive pas. Mes connaissances en Powershell avoisinent le zéro.

Voici ma situation:
Dans mon AD j'ai plusieurs OU qui ont des sous OU dans lesquelles on trouve des utilisateurs, des groupes d'utilisateurs et des groupe de permissions de partage NTFS.

En pratique ça donne ça:
Sur mon serveur de fichier j'ai un dossier \"Marketing\". J'ai donc 2 groupes pour ce dossier: P_PARTAGE_MARKETING_RO et P_PARTAGE_MARKETING_RW.
Dans ces groupes de partage je vais mettre des groupes d'utilisateurs.
Mes groupes d'utilisateurs sont GU_MARKETING, GU_DIRECTION, GU_INFORMATIQUE, etc.
Ce qui donnera, par exemple, GU_MARKETING membre de P_PARTAGE_MARKETING_RW et GU_DIRECTION membre de P_PARTAGE_MARKETING_RO.
Dans ces groupes d'utilisateurs je place des utilisateurs (logique ^^) mais aussi, rarement, d'autres GU_*.
Rarement aussi il se peut qu'il y ait des utilisateurs qui soient directement dans les groupes de partage P_PARTAGE_*

La problématique:
Mon patron veut un fichier Excel qui lui permette de voir, quand il le veut, à quel partage l'utilisateur Toto à accès, ou alors quels sont les utilisateurs qui ont accès à P_PARTAGE_MARKETING_RW (par exemple).
Il le veut sous la forme d'une colonne pour les utilisateurs, une colonne pour indiquer dans quels groupes GU_* ils sont \"directement\", une autre pour indiquer si le GU_* de la colonne précédente fait partie d'un autre GU_* et une dernière colonne pour les groupes P_PARTAGE_*

Je joins un exemple du format Excel que que mon patron veut.
Ici

Je me suis basé sur ce code: ( Source )
[code:1]import-module activeDirectory

$table = $null
$table=@()
foreach($user in (Get-ADUser -Filter * -SearchBase \"OU=Groupes,OU=XXXX,DC=domaine,DC=fr\" -Properties memberof)){
foreach($groupName in $user.memberof){
$o = New-Object System.Object
$o | Add-Member -Type NoteProperty -Name UserName -Value $user.Name
$o | Add-Member -Type NoteProperty -Name GroupName -Value (get-adgroup $groupName).Name
$table += $o
}
}

$table | Export-Csv -path \"C:\result.csv\" -Delimiter \";\" -Encoding UTF8 -NoTypeInformation[/code:1]


Quelqu'un peut il m'aider, SVP?

Merci.<br><br>Message édité par: Arnaud Petitjean [MVP], à: 17/10/14 16:20

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

Plus d'informations
il y a 11 ans 5 mois #18246 par Arnaud Petitjean
Bonjour Alban, sois le bienvenu dans le forum :)

Merci d'avoir posé cette question... lol :P

La problématique que tu soulèves est une problématique que se posent la plupart des grandes entreprises. En effet, la gestion des permissions, des partages, et qui a accès à quoi est vite un casse-tête très complexe à résoudre.

La société pour laquelle je travaille (+ de 5000 salariés) a opté pour un développement maison. Ce dernier a mobilisé une petite équipe de développeurs durant plusieurs mois... Il est donc tout à fait normal qu'en quelques jours tu n'aies pas avancé beaucoup.

Personnellement j'aurai tendance à te conseiller de prendre un produit sur l'étagère, tel que par exemple QUEST Change Auditor for Windows File Servers ; mais je sais qu'il en existe beaucoup d'autres sur ce créneau.

Sinon, si ton boss ne peut pas se permettre un produit du marché, il va falloir te retrousser sérieusement les manches... Lol ;)
Et si tu choisis cette voie, de mon point de vue cela ne sert à rien de partir du groupe (ou de l'utilisateur) pour savoir à quoi il a accès, vu que cette information ne se trouve pas dans l'AD mais bel et bien dans le système de fichiers. A mon sens il faudrait donc partir de chacun de tes partages et remonter toute la chaine, soit :
Partage -&gt; Groupe -&gt; Groupe -&gt; utilisateur

Avec la prise en compte évidemment qu'il peut y avoir plusieurs niveaux d'imbrication de groupes.
Ce n'est donc pas impossible, mais sache que tu risques d'y passer un temps infini car les besoins de ton Boss risquent d'être croissant...

Et sinon, pour info, tu as oublié de publier le fichier Excel que tu voulais nous montrer. :laugh:

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 11 ans 5 mois #18247 par Alban LAMBERTY
Bonjour Arnaud,

Merci pour ta réponse rapide.

En ce qui concerne le fichier Excel je pense avoir un peu raté l'édition de mon message et je viens de m’apercevoir que j'ai fais un doublon (qui lui, est à jour). Toutes mes excuses.

Je vais regarder du coté de QUEST Change Auditor comme tu me le conseils mais je ne me fais pas trop d'illusion sur la réponse du boss si c'est payant. :D
Peut être en trouverai-je un gratuit (on peut rêver ^^)

En ce qui concerne le fait de partir du partage et non de l'utilisateur, je ne suis pas sûr de comprendre.
Il y a bien la fonction \&quot;$groupName in $user.memberof\&quot; qui permet d'aller chercher les infos \&quot;membre de\&quot; dans l'AD.
Ce n'est pas la bonne méthode?

Je vais essayer de voir en prenant le pb dans l'autre sens. :)

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

Plus d'informations
il y a 11 ans 5 mois #18248 par Arnaud Petitjean
C'est bon j'ai fusionné les 2 fils de discussion en 1.

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 11 ans 5 mois #18249 par Alban LAMBERTY
Merci Arnaud pour la fusion des posts.

J'ai regardé le produit que tu m'as conseillé et c'est plus un outils d'audit des permission et des accès.
Il a l'air démesuré pour mon besoin et son cout à failli donner une crise cardiaque à mon boss. :)

Pour en revenir à mon script, Y a t'il un moyen (et quel en est la syntaxe) d'utiliser un filtre sur la ligne suivante pour ne faire apparaitre que les groupes qui commence par \&quot;GU_\&quot;?
Je n'ai pas réussi à placer correctement -Filter GU_*

[code:1]$o | Add-Member -Type NoteProperty -Name GroupName -Value (get-adgroup $groupName).Name[/code:1]

Merci.

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

Plus d'informations
il y a 11 ans 5 mois #18258 par Philippe
salut Alban.L

un petit exemple de filtre :

[code:1]Get-ADGroup -Filter {SamAccountName -like \&quot;GU_*\&quot;}
[/code:1]

tu a sur la technet de [urlhttp://technet.microsoft.com/fr-fr/library/ee617196.aspx]Get-ADGroup[/url] des exemples de filtres dans l'explication de option filtre

Pour la suite de ton script n'hésite pas a nous interroger.
On n'est pas très nombreux ni très présent mais on est là !!!

PS: pourquoi faire un (get-adgroup $groupName).Name d'un nom de groupe que tu connais déjà : $groupName ??
et si tu met le filtre ci-dessus tu aura tous les group qui y corresponde même si y n'ont pas l'utilisateur comme membre !! :blink:

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

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