Question Problème de tableau

  • PatriceLT
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 9 ans 1 mois #23463 par PatriceLT
Problème de tableau a été créé par PatriceLT
Bonjour,

Je suis en train de plancher actuellement sur un script orienté GPO, malheureusement je suis bloqué pour du formatting data.

J'ai actuellement 2 commandes qui me permettent de récupérer un displayName de plusieurs gpos, et une autre commande qui me permet de récupérer un Trustee.Name .

Voici le script contenant les 2 commandes :

[code:1]
Import-Module ActiveDirectory
Import-Module GroupPolicy

$Domaine = patrice.lab
$Nom = Read-Host \"Saisir un groupe valide \"

# Récupérer les GPO ou le nom du groupe de sécurité existe #

$GPO = Get-GPO -All -Domain $Domaine | % { if ($_.GetSecurityInfo() | where {$_.Trustee.Name -eq $Nom}) {$_.DisplayName}}

# Récupérer les permissions du groupe ou elles sont appliqués sur les gpos #

(Get-GPO -All -Domain $Domaine) | % {($_.GetSecurityInfo() | where {$_.Trustee.Name -eq $Nom})} | % {$_.Permission}

[/code:1]

La première commande est de type :
IsPublic : True
IsSerial : True
Name : Object[]
BaseType : System.Array

La seconde commande est de type :
IsPublic : True
IsSerial : True
Name : Object[]
BaseType : System.Array

Je souhaiterais, si c'est possible, faire un tableau de type PsObject afin d'y mettre :

GPO | Permission | NomGroupe
--- |
|
1ere GPO | GpoCustom | Group1
2eme GOI | GpoCustom | Group1

afin d'avoir une vue globale sur le nom du groupe que l'on sélectionne, savoir sur quelle gpo il est appliqué, et en quelle permission il est au niveau des GPOs.

Je pense qu'il s'agit soit d'un problème de Formatting Data, soit d'un problème de tableau associatif. Mais j'ai peur que pour chaque commande que je fasse côté Permission, ça me mette le total des permissions pour une GPO, si j'ai 30 GPO ça fera 30 GPO x 4 Permissions ... ce qui est ingérable.

Il faudrait que pour chaque GPO, il y ai la permission du groupe qui lui corresponde.

Merci par avance.<br><br>Message édité par: PatriceLT, à: 13/04/17 14:21

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

Plus d'informations
il y a 9 ans 1 mois #23468 par Philippe
Réponse de Philippe sur le sujet Re:Problème de tableau
salut PatriceLT

Je pense qu'il s'agit soit d'un problème de Formatting Data, soit d'un problème de tableau associatif. Mais j'ai peur que pour chaque commande que je fasse côté Permission, ça me mette le total des permissions pour une GPO, si j'ai 30 GPO ça fera 30 GPO x 4 Permissions ... ce qui est ingérable.

je pense que tu part dans la mauvaise direction !!
des fois on pense que c'est plus simple de séparé les actions mais ça peut rendre les choses plus compliqué :blink:

l'astuce ici c'est d'identifier les attributs unique pour une seule GPO (ici le nom de la gpo) et le point des attributs changeants (le GetSecurityInfo())

vue que tu va travaillais sur plusieurs gpos c'est un autre point de changement :ohmy:

ce qui veut dire deux boucles
et c'est dans la boucle interne que tu va crée ton objet (astuce que tu avais besoin)

et ... rien d'autre, pour le moment ;)
[code:1]
Import-Module ActiveDirectory
Import-Module GroupPolicy

$Domaine = patrice.lab

$Nom = Read-Host \&quot;Saisir un groupe valide \&quot;

$GPO = Get-GPO -all -Domain $Domaine | foreach {
if ($_.GetSecurityInfo() | where {$_.Trustee.Name -eq $Nom}) {
$item = $_
$nomgpo = $_.DisplayName
$_.GetSecurityInfo() | foreach {
$objet = New-Object Psobject
$objet | Add-Member -Name \&quot;GPO\&quot; -MemberType Noteproperty -value $nomgpo
$objet | Add-Member -Name \&quot;Permission\&quot; -MemberType Noteproperty -value $_.Permission
$objet | Add-Member -Name \&quot;NomGroupe\&quot; -MemberType Noteproperty -value $_.Trustee.Name
$objet
}
}
}
[/code:1]pour info l'option domaine n'est pas utile si tu n'est connecté qu'à un seul domaine et pas a une forest !

j'ai pas commenter, ça semble clair, mais si besoin n'hésite pas à posé des questions !

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

  • PatriceLT
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 9 ans 1 mois #23470 par PatriceLT
Réponse de PatriceLT sur le sujet Re:Problème de tableau
Hello 6ratgus,

Merci pour ton message, effectivement il s'agit bien du résultat escompté.

J'ai cependant modifié le if en lui rajoutant un where {$_.Trustee.Name -eq $Nom} sinon il me sortait tous les groupes de sécurité pour une gpo.

Ensuite concernant le $objet |add-member -Nom \&quot;NomGroupe\&quot; j'ai mis en value le $Nom qui est bien le groupe que je recherche.

En tout cas tout ça marche niquel, je te remercie :)<br><br>Message édité par: PatriceLT, à: 13/04/17 16:32

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

  • PatriceLT
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 8 ans 3 mois #25034 par PatriceLT
Réponse de PatriceLT sur le sujet Re:Problème de tableau
Bonjour,

Après avoir repris le code pour faire quelque chose de similaire, je buche depuis 2 semaines, mais sans résultat. Quelqu'un pourrait m'aiguiller sur ce code ?

[code:1]
Import-Module ActiveDirectory
Import-Module GroupPolicy

$Domaine = \&quot;patrice.lan\&quot;
$OUs = \&quot;OU=Users,OU=Test,DC=Patrice,DC=lan\&quot;
$Tableau = New-Object PSObject

# Récupération de toutes les OUs + Sous OUs #
$OU = $OUs | % {Get-ADOrganizationalUnit -SearchBase $_ -SearchScope Subtree -Server $Domaine -Filter * | foreach {$_.DistinguishedName}

# Récupération des GPOs liés à ces OUs #
$GPOLinks = $OU | % {(Get-GPInheritance -Target $_ -Domain $Domaine).GpoLinks} | foreach {$_.DisplayName}

$NomGpos = $GPOLinks | foreach {Get-GPO -Name $_ -Domain $Domaine} | foreach {
if($_.GetSecurityInfo())
{
$Item = $_
$NomGpo = $_.DisplayName
$Status = $_.GpoStatus
$_.GetSecurityInfo() | foreach {
if($_.Permission -eq \&quot;GpoCustom\&quot;)
{
$GrpsExclu = $_.Trustee.Name
}
elseif($_.Permission -eq \&quot;GpoApply\&quot;)
{
$GrpsApply = $_.Trustee.Name
}
elseif(($_.Permission -ne \&quot;GpoCustom\&quot;) -and ($_.Permission -ne \&quot;GpoApply\&quot;))
{
$GrpsExclu = $null
$GrpsApply = $null
}
$objet = New-PSObject
$objet | Add-Member -Name \&quot;GPO\&quot; -MemberType 'NoteProperty' -value $NomGpo
$objet | Add-Member -Name \&quot;Groupes Apply\&quot; -MemberType 'NoteProperty' -value $GrpsApply
$objet | Add-Member -Name \&quot;Groupes Exclus\&quot; -MemberType 'NoteProperty' -value $GrpsExclu
$objet
}
}
}
$NomGpos
[/code:1]

Entre autre, je souhaiterai que pour chaque GPO, je récupère les groupes appliqués, groupes refusés, donc pour chaque Permission de la GPO, je souhaiterais une colonne pour Groupes Apply, une colonne Groupes Exclus, une colonne pour le nom de la GPO correspondante.

Avec ce morceau de script, faut l'avouer un peu dégueu :sick: , j'arrive à moitié à faire ce que je souhaite.

Cependant, les GPOs se mettent en doublon (voir plus) et a chaque fois, il me met un groupe apply et exclu, un coup qui est correcte, et pour la gpo suivante, qui ne l'ai plus.

Admettons : GPO 1 -- Groupes Apply : Toto1 -- Groupes Exclu : Titi1
GPO 2 -- Groupes Apply : Toto2 -- Groupes Exclu : Tata2
GPO 3 -- Groupes Apply : Toto2 -- Groupes Exclu Titi1

Sauf que la GPO 3 n'a pas dans ma gpmc, de groupe exclu...

Merci de votre aide.<br><br>Message édité par: PatriceLT, à: 21/02/18 11:05

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

Plus d'informations
il y a 8 ans 3 mois #25038 par Philippe
Réponse de Philippe sur le sujet Re:Problème de tableau
salut PatriceLT

tu a simplement un problème de remise a zéro de variables
il te faut les remettre a zéro en début de boucle, ici :

[code:1] $_.GetSecurityInfo() | foreach {
$GrpsExclu = $null
$GrpsApply = $null
[/code:1]

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

  • PatriceLT
  • Auteur du sujet
  • Visiteur
  • Visiteur
il y a 8 ans 3 mois #25040 par PatriceLT
Réponse de PatriceLT sur le sujet Re:Problème de tableau
Bonjour 6ratgus,

Après vérification, je n'ai pas vu de changement. Et j'ai aussi un problème de doublon dans mes gpos ou lorsqu'un groupe d'exclusion est présent, mais pas en groupe d'application, le résultat se met en 1 ligne :

GPO 1 | Titi1 | Toto 2
GPO 1 | #null (vide) | Toto 2

Y a t-il possibilité de fusionner ces lignes afin de n'avoir qu'une seule GPO avec le groupe Titi 1 et Toto 2 sans pour autant que cela fasse 2 lignes, alors qu'un des groupes est vide ?

J'ai du coup dans mon if($_.permission) rajouté un if qui test le trustee.name différent de $null mais ça n'apporte aucun résultat. Aurais tu une petite solution, que ce soit pour fusionner les différentes lignes si les groupes sont les mêmes ou refaire même un foreach afin de n'avoir qu'une GPO avec le groupe appliqué, le groupe exclu, mais si l'un des 2 groupes est vide afin que ce soit plus lisible et propre ?

Merci par avance.

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

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