Comment importer des utilisateurs dans Active Directory à partir d’un fichier CSV avec PowerShell ?

L’une des applications les plus courantes de PowerShell que je vois utilisées par les professionnels de l’informatique est la synchronisation des informations avec Active Directory (AD). Il semble que tout le monde dispose d’une source de données externe qui est en corrélation avec certains employés que nous devons intégrer dans AD. On peut s’y attendre car AD est généralement le service informatique le plus utilisé dans une entreprise et offre une excellente fonction non seulement d’authentification mais aussi de dépôt d’informations sur les employés.

Que vos données soient stockées dans une base de données SQL personnalisée ou dans un système RH sophistiqué, il est pénible de devoir vérifier deux endroits pour obtenir des informations telles que le département de l’employé, les groupes dont cet employé devrait être membre, etc. Lorsque vous commencez à synchroniser ces données, le système source peut modifier son schéma, changer d’API, de serveurs, etc. Pour que la source de données à partir de laquelle vous effectuez la synchronisation reste toujours la même et qu’elle puisse être facilement créée à partir d’un certain nombre de systèmes, il est conseillé d’obtenir ces données dans un fichier CSV.

Un simple fichier CSV peut être exporté à partir d’à peu près n’importe quel logiciel ou base de données et, dans ce format, l’administrateur dispose d’une copie qu’il peut modifier autant que nécessaire, évitant ainsi les demandes d’une autre équipe pour modifier une base de données quelque part.

Nous allons utiliser un script simple que vous pouvez utiliser aujourd’hui pour voir comment nous pouvons synchroniser un attribut à partir d’un CSV vers un compte AD.

Pour préparer le terrain, disons que j’ai un fichier CSV appelé C:Employees.csv. Ce fichier CSV comporte trois colonnes : FirstName (Prénom), LastName (Nom) et Department (Département). Vous aimeriez un script qui puisse trouver le compte AD associé à ce prénom et à ce nom, puis modifier le département en fonction de ce qui figure dans le fichier CSV.

Ce script, comme tout script de synchronisation, se compose principalement de trois “phases” Ces “phases” consistent à lire les données source (CSV dans cet exemple), à trouver l’identifiant unique des données source de destination correspondant aux données source (AD samAccountName dans cet exemple), et enfin à écrire les attributs associés à ce compte.

La première tâche consiste à lire le fichier CSV.

$csvUsers = Import-Csv -Path 'C:Employees.csv'

Fait. L’étape suivante consiste à trouver l’identifiant unique qui correspond à chaque ligne du fichier CSV. Comme nous n’avons pas d’identifiant unique dans le CSV, nous devons en créer un à la volée. Pour obtenir cet identifiant unique, nous allons partir du principe que l’initiale du prénom et le nom de famille d’un employé correspondent toujours à un nom de compte AD samAccountName. Nous devons créer cette recherche samAccountName, puis effectuer une requête AD pour voir si un compte existe.
Remarque : Avant d’aller plus loin, assurez-vous d’avoir téléchargé et installé les outils d’administration de serveur à distance pour votre système d’exploitation. Vous obtiendrez ainsi le module Active Directory PowerShell qui contient les cmdlets Get-AdUser et Set-AdUser que nous allons utiliser.

foreach ($csvUser in $csvUsers) {
    $userName = '{0}{1}' -f $csvUser.FirstName.SubString(0,1),$csvUser.LastName
    if ($adUser = Get-AdUser -Filter "samAccountName -eq $userName" -Properties $attributesToSync) {
        ## Notre "identifiant unique" a été trouvé. Procéder à la lecture des données CSV et à l'écriture des attributs
    } else {
        Write-Warning -Message 'Correspondance avec utilisateur non trouvée'
    }
}

Une fois que nous disposons d’un compte AD, nous pouvons lire chaque attribut associé au nom de l’employé dans le fichier CSV et écrire ces informations dans le compte AD trouvé. Remarquez ci-dessous que je définis la variable $attributesToSync et que je la lis par la suite. J’ai fait cela pour pouvoir ajouter des attributs supplémentaires qui pourraient se trouver dans le CSV afin de les synchroniser également à l’avenir. L’exemple ci-dessous vérifie d’abord si l’attribut est le même. Si ce n’est pas le cas, il utilise Set-AdUser pour le modifier.

$attributesToSync = 'Department'
foreach ($csvUser in $csvUsers) {
    $userName = '{0}{1}' -f $csvUser.FirstName.SubString(0,1),$csvUser.LastName
    if ($adUser = Get-AdUser -Filter "samAccountName -eq $userName" -Properties $attributesToSync) {
        foreach ($attr in $attributesToSync) {
            if ($csvUser.$_ -ne $adUser.$_) {
                $setParams = @{$_ = $csvUser.$_}
                $adUser | Set-AdUser @setParams
            }
        }
    } else {
        Write-Warning -Message 'Correspondance avec utilisateur non trouvée'
    }
}

Cet exemple ne fonctionnera qu’avec les attributs qui sont des valeurs de chaîne dans AD. Faites attention aux attributs tels que le gestionnaire, la date d’expiration du compte, etc. Ces attributs exigent qu’un objet du bon type soit construit avant d’être écrit dans AD. Il faudrait une autre série d’articles pour aborder les subtilités de la synchronisation AD et du travail avec les différents attributs, mais j’ai créé un PowerShell appelé PSADSync qui vous aide dans cette tâche. Il peut être trouvé en le prenant de la galerie PowerShell avec Install-Module PSADSync.

Adam Bertram est un MVP (Microsoft Most Valuable Professional) Microsoft Windows Cloud et Datacenter Management. Il est l’auteur de plusieurs cours de formation, contribue régulièrement à de nombreuses publications imprimées et en ligne et fait des présentations dans divers groupes d’utilisateurs et conférences. Vous pouvez retrouver Adam sur adamtheautomator.com ou sur Twitter à @adbertram.

Pour aller plus loin

Pour créer une équipe informatique efficace et performante, il est essentiel d'avoir une solution centralisée qui joue le rôle de nœud principal pour vos services. NinjaOne permet aux équipes informatiques de surveiller, gérer, sécuriser et prendre en charge tous les appareils, où qu'ils soient, sans avoir besoin d'une infrastructure complexe sur site. Pour en savoir plus sur NinjaOne Endpoint Management, participez à une visite guidée, ou profitez d'un essai gratuit de la plateforme NinjaOne.

Catégories :

Vous pourriez aussi aimer

×

Voir NinjaOne en action !

En soumettant ce formulaire, j'accepte la politique de confidentialité de NinjaOne.

Termes et conditions NinjaOne

En cliquant sur le bouton “J’accepte” ci-dessous, vous indiquez que vous acceptez les termes juridiques suivants ainsi que nos conditions d’utilisation:

  • Droits de propriété: NinjaOne possède et continuera de posséder tous les droits, titres et intérêts relatifs au script (y compris les droits d’auteur). NinjaOne vous accorde une licence limitée pour l’utilisation du script conformément à ces conditions légales.
  • Limitation de l’utilisation: Les scripts ne peuvent être utilisés qu’à des fins personnelles ou professionnelles internes légitimes et ne peuvent être partagés avec d’autres entités.
  • Interdiction de publication: Vous n’êtes en aucun cas autorisé à publier le script dans une bibliothèque de scripts appartenant à, ou sous le contrôle d’un autre fournisseur de logiciels.
  • Clause de non-responsabilité: Le texte est fourni “tel quel” et “tel que disponible”, sans garantie d’aucune sorte. NinjaOne ne promet ni ne garantit que le script sera exempt de défauts ou qu’il répondra à vos besoins ou attentes particulières.
  • Acceptation des risques: L’utilisation du script est sous votre propre responsabilité. Vous reconnaissez qu’il existe certains risques inhérents à l’utilisation du script, et vous comprenez et assumez chacun de ces risques.
  • Renonciation et exonération de responsabilité: Vous ne tiendrez pas NinjaOne pour responsable des conséquences négatives ou involontaires résultant de votre utilisation du script, et vous renoncez à tout droit ou recours légal ou équitable que vous pourriez avoir contre NinjaOne en rapport avec votre utilisation du script.
  • EULA: Si vous êtes un client de NinjaOne, votre utilisation du script est soumise au contrat de licence d’utilisateur final qui vous est applicable (End User License Agreement (EULA)).