IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

methode rapide synchro user openldap vers ad en powershell


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 173
    Par défaut methode rapide synchro user openldap vers ad en powershell
    Bonjour,

    Je cherche un méthode rapide de synchro entre un annuaire ad et ldap
    pour l'instant j'utilise un custom object intermédiaire, que je rempli avec les 2 sources et j'utilise un compare-object pour tester l'existence ou non des user
    et un deuxième compare object avec un filtre (sur les user present) pour tester les attributs à modifier

    méthode fiable, mais ce a prend pas mal de temps et de mémoire
    avez-vous d'autre méthode ?

    autre question :
    Code Powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    $toto=($toutlesuser|where-object -FilterScript {$_.SamAccountName -in $userpresent.SamAccountName})

    est-il aussi rapide qu'un join ?

    Merci,

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Hum ... on est d'accord LDAP est un langage de communication avec l'AD ?

    Concernant les problèmes de performances, tu devrais peux être te constituer un hashtable ou arraylist avec les SamAccountName

    Je regarderai, à l’occasion, ce que j’avais fait pour ce cas de figure

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 173
    Par défaut
    bonjour,

    il s'agit de 2 annuaires

    ayant des attribut dont le nom est different mais les info similaire ex (sAMaccountName=uid)

    ce qui ma donné l'idée de crée un custom object intermediare qui reprent les info des 2 coté pour facilement les comparer avec compare-object
    mais bon coté perf le remplissage des object des deux coté est chronophage et sans doute pas optimisé

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Le hashtable semble adapté.
    Il nous faudrait un peu plus de code pour voir

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 173
    Par défaut
    ce que cela donne :


    Nom : diagrame.png
Affichages : 87
Taille : 70,9 Ko

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Ok merci pour le diagramme.
    Voici une première proposition théorique, mais je n'ai pas des milliers de données pour tester les perfs.

    Ma base de données ldap : ldap.csv
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    uid,sn,value3
    id1,toto,val1
    id2,tata,val2
    id3,titi,val3
    Ma base de données ad : ad.csv
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    samaccountname,surname,value3
    id1,toto,val1
    id2,tata,val9
    id4,tutu,val4
    Le script
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    $ldap = Import-Csv -Delimiter "," -LiteralPath "ldap.csv" -Encoding UTF8
    $ad = Import-Csv -Delimiter "," -LiteralPath "ad.csv" -Encoding UTF8
     
    # Crée un hashtable
    $table = @{}
     
    # Ajoute les informations de ldap au hashtable
    foreach($user in $ldap)
    {
        $obj = [PSCustomObject]@{
            samaccountname = [string]$user.uid
            ldap_exist = $true
            ldap_surname = [string]$user.sn
            ldap_field3 = [string]$user.value3
            ad_exist = $false
            ad_surname = ""
            ad_field3 = ""
        }
        $table.Add([string]$obj.samaccountname, $obj)
    }
     
    # Ajoute les informations de l'ad au hashtable
    foreach($user in $ad)
    {
        if ($table.ContainsKey($user.samaccountname))
        {
            $obj = $table[$user.samaccountname]
            $obj.ad_exist = $true
            $obj.ad_surname = [string]$user.surname
            $obj.ad_field3 = [string]$user.value3
        }
        else
        {
            $obj = [PSCustomObject]@{
                samaccountname = [string]$user.samaccountname
                ldap_exist = $false
                ldap_surname = ""
                ldap_field3 = ""
                ad_exist = $true
                ad_surname = [string]$user.surname
                ad_field3 = [string]$user.value3
            }
            $table.Add([string]$obj.samaccountname, $obj)
        }
    }
     
     
    # Si pas dans ldap et dans l'ad
    $table.values | Where-Object {!$_.ldap_exist -and $_.ad_exist} | ForEach-Object {
        Write-Host "Suppression dans l'ad : $($_.samaccountname)"
    }
     
    # Si dans ldap et pas dans l'ad
    $table.values | Where-Object {$_.ldap_exist -and !$_.ad_exist} | ForEach-Object {
        Write-Host "Créé dans l'ad : $($_.samaccountname) ($($_.ldap_surname), $($_.ldap_field3))"
    }
     
    # Si dans ldap et dans l'ad
    $table.values | Where-Object {$_.ldap_exist -and $_.ad_exist} | ForEach-Object {
        # Si une propriété est différente
        if ($_.ldap_surname -ne $_.ad_surname -or $_.ldap_field3 -ne $_.ad_field3)
        {
            Write-Host "Modifie les propriétés de : $($_.samaccountname)"
        }
    }

    La sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Suppression dans l'ad : id4
    Créé dans l'ad : id3 (titi, val3)
    Modifie les propriétés de : id2

Discussions similaires

  1. Pinger une liste d'IP. Quelle methode rapide ?
    Par stevensavior dans le forum VB.NET
    Réponses: 21
    Dernier message: 19/01/2015, 22h50
  2. [PowerShell] Exporter des résultats Cplex vers Excel via Powershell
    Par Tfo89 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 10/05/2014, 18h07
  3. Methode pour exporter données vers excel
    Par ALEA001 dans le forum Débutez
    Réponses: 2
    Dernier message: 11/08/2011, 17h34
  4. Réponses: 3
    Dernier message: 08/03/2009, 10h50
  5. Réponses: 1
    Dernier message: 22/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo