none
gestion de groupes AD en fonction du champ department via powershell RRS feed

  • Question

  • Bonjour,

    je suis à la recherche d'éléments permettant d'organiser les groupes d'un AD en foncton du champ department.

    exemple:

    l'utilisateut toto a pour department sales/clothes/shoes

    l'utilisateur titi a pour department communication/web

    l'objectif du script est que toto et les autres users du même department soeint dans les groupe ssuivants:

    sales

    clothes

    shoes

    et titi dans

    communication

    web

    j'arrive bien a écrire un script qui crée le groupesles ou le groupe communication et y ajoute les bons users, mais pour les niveaux e, dessous je sèche.

    si quelqu'un a une idée...

    vendredi 15 avril 2016 08:46

Réponses

  • Voici le script qui peut faire ceci. Il suffit d'ajuster les 2 premières variables:

    $user = "toto"
    $separator = "/"
    $adUser = Get-ADUser -Filter 'Name -eq $user' -Properties * 
    $departments = $adUser.Department
    $departments = $departments.Split($separator)
    
    foreach ($department in $departments){
    
        Add-ADGroupMember $department $user
        $groupMember = (Get-ADGroupMember $department).Name
        foreach ($member in $groupMember){
            if ($member -eq $user){Write-Host -ForegroundColor Green "The user $user has been added to group $department"} else {Write-Host -ForegroundColor Red "Problem to add the user $user to group $department"}   
        }
        
    }

    Florent


    vendredi 15 avril 2016 10:10
  • Bonjour,

    Je ne comprend pas le 1, le script fait ceci... Je viens de tester de nouveau.

    Pour ce qui est du 2, voici la solution, avec un Try/Catch:

    $users = "toto","titi"
    $separator = "/"
    
    foreach ($user in $users){
        Write-Host "Performing steps for user $user"
        $adUser = Get-ADUser -Filter 'Name -eq $user' -Properties * 
        $departments = $adUser.Department
        $departments = $departments.Split($separator)
        foreach ($department in $departments){
    
            Try { Get-ADGroup $department
            Write-Warning "The group $department already exists"
            } Catch {
        
                New-ADGroup -Path "OU=Test,DC=domain,DC=local" -Name $department -SamAccountName $department -GroupCategory Security -GroupScope DomainLocal
                Write-Host -ForegroundColor Green "The group $department has been created" 
        
            }
    
            Add-ADGroupMember $department $user
            $groupMember = (Get-ADGroupMember $department).Name
            foreach ($member in $groupMember){
                if ($member -eq $user){Write-Host -ForegroundColor Green "The user $user has been added to group $department"} else {Write-Host -ForegroundColor Red "Problem to add the user $user to group $department"}   
            }
        
        }
    }

    Florent

    vendredi 22 avril 2016 11:34
  • Bonjour,

    désolé pour ma réponse tardive, mais j'ai été pas mal occupé ces derniers temps

    les 2 scripts fonctionnent très bien, j'avais juste quelques soucis d'adaptation à l'infra

    encore merci pour votre aide

    lundi 30 mai 2016 11:15

Toutes les réponses

  • Bonjour,

    Si je comprend bien, vous souhaitez que le script récupère le département du groupe toto, et suite à ces départements, récupérer tous les utilisateurs qui ont au moins un département en commun?

    Vos noms de département sont les mêmes que les groupes?

    Florent

    vendredi 15 avril 2016 09:33
  • merci pour vore réponse

    oui, les noms de groupes sont les mêmes que ceux des départements

    le but est de récupérer pour chaque utilisateur le champ department et de s'en servir pou l'intégrer dans le sbon groupes

    toto a pour champ sales/clothes/shoes

    à la fin de la manip il devra être dans le groupe sales, le groupe clothes et le groupe shoes

    alors que titi qui a pour department communication/web sera dans les groupes communication et web

    vendredi 15 avril 2016 09:47
  • D'accord, ce n'est pas très complèxe alors. Le format de la partie département est comme ca?

    sales, clothes, shooes

    Séparé par une virgule?

    Florent

    vendredi 15 avril 2016 09:54
  • Voici le script qui peut faire ceci. Il suffit d'ajuster les 2 premières variables:

    $user = "toto"
    $separator = "/"
    $adUser = Get-ADUser -Filter 'Name -eq $user' -Properties * 
    $departments = $adUser.Department
    $departments = $departments.Split($separator)
    
    foreach ($department in $departments){
    
        Add-ADGroupMember $department $user
        $groupMember = (Get-ADGroupMember $department).Name
        foreach ($member in $groupMember){
            if ($member -eq $user){Write-Host -ForegroundColor Green "The user $user has been added to group $department"} else {Write-Host -ForegroundColor Red "Problem to add the user $user to group $department"}   
        }
        
    }

    Florent


    vendredi 15 avril 2016 10:10
  • merci pour votre aide, je vais tester et vous tient au courant

    le séparateur est le / donc ça devrait aller

    vendredi 15 avril 2016 10:23
  • Bonjour,

    merci pour votre aide,

    désolé pour mon retard, mais j'ai essayé d'ajouter certaines fonctionnalités par moi-même

    1- récupération du login de tous les users actifs dans l'AD

    $users = "d:\users.txt"
    get-aduser -filter "enabled -eq 'true'" -property * -SearchBase "dc=tot,dc=sample,dc=com" | select -ExpandProperty samaccountname > $users

    2- pour tous les users de cette liste, on récupère le department

    Import-Module ActiveDirectory
    $userfile = "d:\users.txt"
    $separator = "/"
    $i = 0
    $user = get-content $userfile
    $aduser = get-content $userfile | ForEach-Object {Get-ADUser "$_" -Properties *}
    $departments = $adUser.department
    $departments = $departments.Split("$separator")

    echo $departments

    3- tentative d'inscription des users dans les groupes (merci @flodu31)

    foreach ($department in $departments){
        Add-ADGroupMember $department $user
        $groupMember = (Get-ADGroupMember $department).Name
        foreach ($member in $groupMember){
            if ($member -eq $user){Write-Host -ForegroundColor Green "The user $user has been added to group $department"} else {Write-Host -ForegroundColor Red "Problem to add the user $user to group $department"}   
        }
        
    }

    manquent 2 choses:

    1 - dans le script actuel chaque user est ajouté au groupe du department, même si il ne fait pas partie e ce department => ajout d'un if department.user = le groupe tu ajoutes le user ay groupe, sinon tu passe

    2- si le groupe correspondant au department n'existe pas tu le créée

    ja vais regarder de mon côté, si quelqu'un a des pistes

    jeudi 21 avril 2016 14:39
  • Bonjour,

    Je ne comprend pas le 1, le script fait ceci... Je viens de tester de nouveau.

    Pour ce qui est du 2, voici la solution, avec un Try/Catch:

    $users = "toto","titi"
    $separator = "/"
    
    foreach ($user in $users){
        Write-Host "Performing steps for user $user"
        $adUser = Get-ADUser -Filter 'Name -eq $user' -Properties * 
        $departments = $adUser.Department
        $departments = $departments.Split($separator)
        foreach ($department in $departments){
    
            Try { Get-ADGroup $department
            Write-Warning "The group $department already exists"
            } Catch {
        
                New-ADGroup -Path "OU=Test,DC=domain,DC=local" -Name $department -SamAccountName $department -GroupCategory Security -GroupScope DomainLocal
                Write-Host -ForegroundColor Green "The group $department has been created" 
        
            }
    
            Add-ADGroupMember $department $user
            $groupMember = (Get-ADGroupMember $department).Name
            foreach ($member in $groupMember){
                if ($member -eq $user){Write-Host -ForegroundColor Green "The user $user has been added to group $department"} else {Write-Host -ForegroundColor Red "Problem to add the user $user to group $department"}   
            }
        
        }
    }

    Florent

    vendredi 22 avril 2016 11:34
  • Bonjour,

    désolé pour ma réponse tardive, mais j'ai été pas mal occupé ces derniers temps

    les 2 scripts fonctionnent très bien, j'avais juste quelques soucis d'adaptation à l'infra

    encore merci pour votre aide

    lundi 30 mai 2016 11:15