Question aide pour corriger script AD

Plus d'informations
il y a 3 ans 1 mois - il y a 3 ans 1 mois #30537 par garrigues
Réponse de garrigues sur le sujet aide pour corriger script AD
Bonsoir Laurent, j'ai un peu moins de temps pour tenter de trouver une solution mais je cherche encore.

J'ai tenter de faire la comparaison avec le compare-object comme tu me l'as indiqué et avec les infos que j'ai pû trouver sur le net.

je suis arrivé a ce bout de script qui me trouve bien une différence mais je n'arrive pas à afficher clairement le résultat de cette différence .
$csv= $(get-content -path "C:\users-domjacom.csv" -delimiter ";"| where { $_.GroupePrincipal -contains $_.SamAccountName })
$memb=$(Get-ADGroup -Filter "*" | where { $_.Name -match "gg-*"} |select -ExpandProperty name {name=$groups}
foreach ($Group in $groups) {Get-ADGroupMember $($Group.Name)})

compare-object -referenceobject $(get-content -path "C:\users-domjacom.csv" -delimiter ";"| where { $_.GroupePrincipal -contains $_.SamAccountName }) -differenceobject $(Get-ADGroup -Filter "*" | where { $_.Name -match "gg-*"} |select -ExpandProperty name {name=$groups}
foreach ($Group in $groups) {Get-ADGroupMember $($Group.Name)})

          if ($csv -eq $memb)
          {
          write-host  "tout les utilisateurs sont dans leur groupes   " -ForegroundColor green
          }
          else
          {
          write-host  "des utilisateurs ne sont pas dans leurs groupes   " -ForegroundColor red
          }
Le résultat de la comparaison me montre bien que mes techniciens ne sont pas présents car à l'écran la commande m'affiche tout les groupes ainsi que les autres utilisateurs sauf eux.
J'ai tenté plusieurs options mais aucunes n'a marché pour n'avoir que les différences entre mon csv et les membres de mes groupes AD.
Pourtant il me semblait avoir compris que par défaut le compare-object ne retournait que les différences donc quelques chose m'échape encore la-dessus.

Je n'arrive pas du coup à exploiter le résultat de la comparaison pour indiquer au script de n'intégrer que les choses différentes (mettre mes techniciens dans leurs groupes...).

Peut être qu'en regardant ce que j'ai tenté, tu verra avec ton expérience ce qui ne va pas car moi avec mon expérience des choses qui ne marchent pas comme je veux je ne comprends pas ce qui coince .

Merci encore pour ton aide qui jusqu'ici m'a été précieuse.
Dernière édition: il y a 3 ans 1 mois par garrigues.

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

Plus d'informations
il y a 3 ans 1 mois - il y a 3 ans 1 mois #30552 par Laurent Dardenne
Salut,
ici :
$csv= $(get-content -path "C:\users-domjacom.csv"
c'est import-csv qu'il faut utiliser, enfin si tu cherche à importer des données à partir d'un fichier structuré.
Il ne sert à rien de charger deux fois la même liste :
compare-object -referenceobject $(get-content -path "C:\users-domjacom.csv"

Compare-Object ajoute à chaque objet une propriété SideIndicator et c'est celle-ci que tu dois interroger :
$t=@('un','deux','trois')

$t1=@('deux')

Compare-Object $t $t1
#InputObject SideIndicator
#----------- -------------
#un <=
#trois <=

Si on inverse, sideindicator change :
Compare-Object $t $t1

et si on demande les objets présent dans les 2 collections
Compare-Object $t1 $t -IncludeEqual

sideindicator peut prendre une troisième valeur ( <= , = , => )

Tutoriels PowerShell
Dernière édition: il y a 3 ans 1 mois par Laurent Dardenne.

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

Plus d'informations
il y a 3 ans 1 mois - il y a 3 ans 1 mois #30581 par garrigues
Réponse de garrigues sur le sujet aide pour corriger script AD
Bonsoir Laurent, merci encore une fois pour ton aide.
J'ai regarder pour le compare-object mais cela ne fonctionnait pas car je n'avais pas de tableau de sorte des objets qui se ressemblaient donc le compare-object trouvait des diférences partout .

En cherchant sur le net j'ai trouver un petit script de récupération de membres de groupes AD et sortie sous forme de tableau.
# crée une liste de tous les groupes dans une UO donnée et stocke les objets dans la variable $ groups
$groups = Get-ADGroup -Filter * -SearchBase 'OU=entreprise-jacom,DC=domjacom,DC=local' -Properties name | select name

#pipe chaque objet de groupe dans une boucle foreach et affiche une valeur de chaîne du même nom de groupe et la stocke dans la variable $ groups_string
$groups_string = $groups | % {$_.name}

# crée une liste de tous les utilisateurs d'une UO donnée et stocke les objets dans la variable $ users
$users = Get-ADUser -Filter * -SearchBase 'OU=entreprise-jacom,DC=domjacom,DC=local'


$results=@{
"Username" = ""
"Groupname" = ""
}

$tableAD=@()

#teste chaque utilisateurs de la variable $users et récupère leurs appartenances aux groupes
foreach ($user in $users) {
    # sélectionne chaque nom de groupe et le stocke dans la variable $ groupMembership
    $groupMembership = Get-ADPrincipalGroupMembership $user | select name

    # compare les noms du groupe de chaque utilisateur au nom du groupe de base.
    $groupMembership | foreach ($_) {

        #S'il y a une correspondance, ajoutez le nom du groupe et le nom d'utilisateur à la table de hachage $ results
        if ($groups_string -contains $_.name) {
            $results."Groupname" = $_.name
            $results."Username" = $user.Name

            # créer un nouvel objet PS et fournir les propriétés de la table de hachage $ results à chaque objet
            $objresults = New-Object psobject -Property $results

            # ajouter chaque objet au tableau $ table
            $tableAD += $objresults
        }
    }  

}

$tableAD

voici le résultat de la sortie:
ibb.co/ByM4L8w

A partir de sa est après avoir reagerder une vidéo sur le "parsing" je me suis fait le bout de script suivant pour la récupération de mes utilisateurs et groupes csv pour pouvoir comparer les 2 tableaux
#chemin du fichier a analiser
$file= "C:\users-domjacom.csv"

#variable contenu du fichier
$text = Get-Content -Path $file

$result= foreach ($currentline in $text){


#separe les infos de la ligne
$infos=  $currentline -split ';'

#hashtable
$hashtable= @{
Username= $infos[0]
Groupname =$infos[10]
}

#cree un objet pour chaque infos
New-Object -TypeName PSObject -Property $hashtable | Select-Object -Property Username,Groupname
if (!($infos[11] -eq ([string]::Empty)))
{
$hashtable= @{
Username= $infos[0]
Groupname =$infos[11]
}
New-Object -TypeName PSObject -Property $hashtable | Select-Object -Property Username,Groupname
}
}

$result

il me retourne le résultat suivant:

ibb.co/KhzKCZH

On peut voir que mes techniciens (groupe principal et secondaire) ne sont pas présents sur le tableau de l'AD.

sauf que le compare-object ne voit pas cette diférence majeure entre les 2 tableaux mais il trouve autre chose que je ne m'explique toujours pas:
compare-object  $tableAD $result -IncludeEqual

ibb.co/znH7vCH

Il me met un sideindicator sur des utilisateurs ou il m'a mit un égal juste audessus mais ne voit pas que les membres du groupe technicien ne sont pas présents dans le tableau de l'AD et je n'arrive pas a comprendre d'ou peut venir le problème.

Du coup je suis encore bloqué pour la fin avec l'intégration de mes techniciens dans leur groupe vu que la comparaison ne marche pas comme elle devrait.

Je pensais après avoir réussi à sortir 2 tableaux quazi identques que la comparaison marcherait mais ce n'est pas le cas pour une raison qui m'échape.
Si tu as une idée je suis toujours preuneur .
Merci encore pour ton aide.
Dernière édition: il y a 3 ans 1 mois par garrigues.

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

Plus d'informations
il y a 3 ans 1 mois #30584 par Laurent Dardenne
salut,
sur ce point :
>>sauf que le compare-object ne voit pas cette différence majeure entre les 2 tableaux mais il trouve autre chose que je ne m'explique toujours pas:
dans la recopie d'écran certains noms sont sans espace d'autres avec, ce n'est donc pas le même nom :
'Nom Prenom' et 'NomPrenom¨'

Tutoriels PowerShell

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

Plus d'informations
il y a 3 ans 1 mois - il y a 3 ans 1 mois #30585 par garrigues
Réponse de garrigues sur le sujet aide pour corriger script AD
Re bonjour Laurent, pour l'espace dans le nom je l'avais vu mais sa n'avait pas l'air de lui poser des soucis sauf pour les 7 derniers utilisateurs.

J'ai donc modifier le code pour qu'il m'affiche les prenomnom sans espace
#chemin du fichier a analiser
$file= "C:\users-domjacom.csv"

#variable contenu du fichier
$text = Get-Content -Path $file

$result= foreach ($currentline in $text){

#separe les infos de la ligne
$infos=  $currentline -split ';'

#hashtable
$hashtable= @{
Username= $infos[6]
Groupname =$infos[10]
}

#cree un objet pour chaque infos
New-Object -TypeName PSObject -Property $hashtable | Select-Object -Property Username,Groupname
if (!($infos[11] -eq ([string]::Empty)))
{
$hashtable= @{
Username= $infos[6]
Groupname =$infos[11]
}
New-Object -TypeName PSObject -Property $hashtable | Select-Object -Property Username,Groupname
}
}

$result

le résultat ressort bien sans espaces

ibb.co/rx2dJd9

mais le compare-object merde encore sur les mêmes noms et ne voit toujours pas que les techniciens sont pas présents...

ibb.co/YTJv2J9

il y a 7 utilisateurs qui devraient être dans le groupe technicien (le compare-object m'indique 9 différences donc sa ne correspond pas, le truc que je comprends pas c'est que les différence qu'il trouve soit disant sont en fait signalées identiques au-dessus...) et il ne m'affiche pas du tout les bons noms qui sont donc différents entre les 2 tableaux
Dernière édition: il y a 3 ans 1 mois par garrigues.

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

Plus d'informations
il y a 3 ans 1 mois #30607 par Laurent Dardenne
Sans jeu de test commun on peut échanger des semaines sur le sujet.
Et sans AD de dev je ne vois pas ce que je peux faire de plus pour t'aider.

Tutoriels PowerShell

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

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