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 :

Migration Users d'une OU à une Autre


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 7
    Points
    7
    Par défaut Migration Users d'une OU à une Autre
    Bonjour à tous,

    Je dispose sur mon AD d'une OU regroupant tous les utilisateurs, ces utilisateurs sont répartis sur plusieurs sites. Je souhaite dispatcher ces utilisateur dans les OU de leurs sites pour une meilleure gestion.
    Le nombre d'utilisateurs étant conséquent, je voudrai passer par un script PowerShell. Ce script pourrait aller interroger la partie "company" de l'onglet "Attribute editor" de l'objet utilisateur pour connaître le site sur lequel il doit être rapatrier.

    N'y connaissant absolument rien en powershell, savez-vous si cela est possible ? Avez-vous des pistes à me donner? ou peut-être quelqu'un a déjà fait cela !

    Merci A+

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Tu doit installer RSAT (outils d’administration de serveur distant), pour disposer des cmdlet Powershell AD.

    RSAT : https://support.microsoft.com/fr-fr/...rating-systems

    Tu peux commencer par un Get-ADUser afin de trouver un utilisateur et tenter de récupérer ton attribut company.

    La cmdlet Move-ADObject te permettra de déplacer ton objet AD utilisateur.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Merci pour ton aide, j'ai donc créé le script suivant
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    get-aduser -filter * -properties * | where { $_.company -like "Company A" } | move-adobject -TargetPAth "OU=Utilisateurs,OU=Company A,DC=BOB,DC=loc"

    Par contre avec ce code je suis obligé de le recopier autant de fois que j'ai d'OU (ou de company)

    Ne serait-il pas possible d'avoir une code qui permet de tester la company d'un utilisateur et de l'envoyer directement dans son OU. Sachant que la company correspond au nom de l'OU cible!

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    get-aduser -filter * -properties * | move-adobject -TargetPAth "OU=Utilisateurs,OU=$($_.company),DC=BOB,DC=loc"

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Merci ericlm128 !

    Par contre peux-tu m'expliquer brievement le code ? notamment cette partie :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    "OU=Utilisateurs,OU=$($_.company),DC=BOB,DC=loc"

    Désolé je débute

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Tu as compris que $_.company est le contenu du champ company des objets (get-aduser -filter * -properties *) précédemment passé en pipe |

    $() demande l'évaluation explicite de sont contenu afin de le forcer.
    https://docs.microsoft.com/fr-fr/pow...powershell-5.1 -> Subexpression operator $( )

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Top! Merci, j'ai compris le cheminement, je voyais un script beaucoup plus long pour ce type d'opération...

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Salut,
    je voudrai ajouter au script suivant une condition permettant de gérer les OU qui n’existent pas mais aussi qui gère le fait qu'un utilisateur n'ait pas l'attribut "company" de renseigner.

    Comment je peut procéder?

    pour le moment j'ai ça:
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    get-aduser -filter * -properties * | move-adobject -TargetPAth "OU=Utilisateurs,OU=$($_.company),DC=test,DC=loc"

    Merci

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    J'y avais pensé dès le début mais tu as affirmé ceci Sachant que la company correspond au nom de l'OU cible!

    Bon ça fait quoi, ça plante du coup ?

    Tu peux lui dire d'ignorer les erreurs
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    get-aduser -filter * -properties * | move-adobject -TargetPAth "OU=Utilisateurs,OU=$($_.company),DC=test,DC=loc" -ErrorAction SilentlyContinue

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    désolé je m'étais un peu emballé!

    Merci pour ton aide je vais tester ça.
    Pour pousser un peu plus, il aurait peut être été intéressant de lister les erreurs dans un fichier mais finalement les objets restants seront les erreurs!

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Bon du coup j'aimerai pousser un peu plus en gérant les erreurs notamment si l'attribut company n'est pas renseigné ou si l'OU Cible n’existe pas.
    En gros il faudrait que si l'OU n'existe pas, l'objet ne soit pas traité et que si l'attribut company n'est pas renseigné l'objet ne soit pas traité non plus.

    Avec idéalement une gestion des logs.

    Je ne vois pas trop comment le formuler sous forme de code.

  12. #12
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je te propose ceci pour commencer, je ne l'ai pas testé car je n'ai pas d'AD avec les droits suffisants

    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
    $users = Get-ADUser -Filter * -Properties company | Select-Object Name, company
    $ous = Get-ADOrganizationalUnit -Filter * | Select-Object -ExpandProperty DistinguishedName
     
    foreach($user in $users)
    {
        $name = $user.Name
        $company = $user.company
     
        if ([string]::IsNullOrEmpty($company))
        {
            Write-Host "$name : company vide"
        }
        else
        {
            $targetou = "OU=Utilisateurs,OU=$($company),DC=test,DC=loc"
            if($ous -notcontains $targetou)
            {
                Write-Host "$name [$company] : OU cible inexistante"
            }
            else
            {
                try
                {
                    $user | Move-ADObject -TargetPath $targetou
                    Write-Host "$name [$company] : Réussite du déplacement"
                }
                catch
                {
                    Write-Host "$name [$company] : Echec du déplacement"
                }
            }
        }
    }

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    en lisant le script, je comprends bien le déroulé même si je n'aurai pas été capable de sortir ce code. Donc je suppose que ça doit le faire!
    Je vais regarder ça, merci encore.

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Je te propose ceci pour commencer, je ne l'ai pas testé car je n'ai pas d'AD avec les droits suffisants

    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
    $users = Get-ADUser -Filter * -Properties company | Select-Object Name, company
    $ous = Get-ADOrganizationalUnit -Filter * | Select-Object -ExpandProperty DistinguishedName
     
    foreach($user in $users)
    {
        $name = $user.Name
        $company = $user.company
     
        if ([string]::IsNullOrEmpty($company))
        {
            Write-Host "$name : company vide"
        }
        else
        {
            $targetou = "OU=Utilisateurs,OU=$($company),DC=test,DC=loc"
            if($ous -notcontains $targetou)
            {
                Write-Host "$name [$company] : OU cible inexistante"
            }
            else
            {
                try
                {
                    $user | Move-ADObject -TargetPath $targetou
                    Write-Host "$name [$company] : Réussite du déplacement"
                }
                catch
                {
                    Write-Host "$name [$company] : Echec du déplacement"
                }
            }
        }
    }
    Encore une petite question: si je souhaite définir l'OU de départ pour éviter que le script passe sur tous les comptes! est-ce à la place de l'étoile dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ous = Get-ADOrganizationalUnit -Filter *
    ou je dois mettre le nom de l'OU?

  15. #15
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    OU de départ
    Qu'entend tu par la ? L'OU dans laquelle se trouve l'utilisateur avant déplacement ?

  16. #16
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Si oui GetADUser possède un paramètre SearchScope qui permet de spécifier une OU de recherche

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Si oui GetADUser possède un paramètre SearchScope qui permet de spécifier une OU de recherche
    Oui c'est pour définir l'OU de départ.
    Du coup j'ai regardé le paramètre que tu m'as donné, ça donnerai ça:
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    $users = Get-ADUser -Filter * -Searchscope "OU=OU de départ,DC=test,DC=loc" -Properties company | Select-Object Name, company

  18. #18
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Oui surement

Discussions similaires

  1. [WS 2008 R2] [Active Directory] Déplacer des comptes de users vers une autre branche
    Par Christophe P. dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 11/07/2018, 17h17
  2. Migration de serveur: faire passer un domaine d'une IP a une autre
    Par nabab dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 23/06/2008, 20h23
  3. [SGBD] Migration d'une base vers une autre
    Par dorian67 dans le forum Alimentation
    Réponses: 2
    Dernier message: 29/02/2008, 15h25
  4. migration d'une version de jboss à une autre
    Par collinm dans le forum Wildfly/JBoss
    Réponses: 0
    Dernier message: 04/12/2007, 18h33
  5. Migration un serveur linux dans une autre machine.
    Par whally dans le forum Administration système
    Réponses: 3
    Dernier message: 21/06/2007, 15h32

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