Import-CSV : lecture de fichiers CSV avec PowerShell

Vous pouvez utiliser leImporter-CSVApplet de commande PowerShell pour lire le contenu d'un fichier CSV. Une fois que vous chargez le contenu du fichier CSV, vous obtenez un objet PowerShell dans lequel chaque colonne du fichier CSV est une propriété distincte. Cet article traite des spécificités de la lecture de données à partir de fichiers CSV à l'aide de l'applet de commande Import-CSV.

Les fichiers CSV sont utilisés pour stocker des données tabulaires. Par exemple, nous avons créé une simple feuille de calcul Excel contenant les informations sur l'utilisateur AD avec la structure suivante :ADlogin,Email,Phone,Department. Notez que la première ligne de la feuille de calcul contient les noms des colonnes. Dans PowerShell, ceux-ci seront disponibles en tant qu'attributs d'objet dans le tableau.

Notre tâche consiste à importer ce fichier CSV dans PowerShell et à apporter des modifications à Active Directory pour chaque utilisateur à partir du fichier.

Dans l'article précédent, nous avons expliqué comment utiliser l'applet de commande Export-CSV pour enregistrer des objets PowerShell dans un fichier CSV.

En savoir plus:Importer des utilisateurs AD depuis CSV avec PowerShell

Enregistrez ce fichier Excel en tant que fichier CSV avec des valeurs séparées par des virgules. Le fichier texte résultant devrait ressembler à ceci :

Désormais, pour importer un fichier CSV dans PowerShell, il ne vous reste plus qu'à préciser son nom (chemin) :

$ADUsers=Import-CSV -path C:PSmy_ad_users.csv

L'applet de commande Import-CSV convertit les données d'un fichier CSV en un tableau PowerShell.

Si le fichier CSV utilise des délimiteurs autres que des virgules, vous pouvez les spécifier avec le-Délimiteurparamètre. Par exemple, pour importer un fichier CSV avec un délimiteur point-virgule (;) utilisez la commande :

$ADUsers=Import-CSV -path C:PSmy_ad_users.csv -Delimiter ";"

Si vous utilisez un caractère de tabulation comme délimiteur dans CSV, vous pouvez le spécifier comme suit :-Delimiter `t

Si vous souhaitez utiliser un délimiteur par défaut dans votre système (en fonction de la langue et des paramètres régionaux de Windows), utilisez l'option-UseCulturedrapeau.

Exécutez cette commande pour obtenir votre délimiteur système par défaut dans Windows :

(Get-Culture).TextInfo.ListSeparator

Maintenant, si vous appelez la variable $ADUsers, elle affichera le contenu de votre fichier CSV. L'applet de commande convertit le contenu du fichier en tableau. Toutes les valeurs du fichier CSV sont représentées sous forme de lignes.

Si votre fichier CSV contient un codage de caractères UTF-8, assurez-vous de spécifier également le type UTF8 pour éviter les erreurs de codage :

Import-CSV -path C:PSmy_ad_users.csv -Encoding UTF8

La liste des propriétés d'objet disponibles peut être affichée comme suit :

$ADUsers|get-member

Vous pouvez voir que les lignes du tableau contiennent des PSCustomObjects, dont les éléments sont accessibles par noms de colonnes à partir de votre fichier CSV.

Vous pouvez afficher toutes les valeurs d'une certaine colonne :

$ADusers.email

Ou les attributs d'objet spécifiés :

$ADusers| Select-Object Email, Phone

Une autre option utile consiste à accéder directement à un objet spécifique dans le tableau. Par exemple, exécutez la commande suivante pour obtenir la valeur de la ligne 4 (la numérotation commence à 0) :

$ADusers[3]

Si vous souhaitez modifier les attributs des utilisateurs Active Directory que vous avez spécifiés dans votre fichier CSV, utilisez simplement la boucle ForEach pour parcourir toutes les lignes du tableau $ADUsers (nous utiliserons la cmdlet Set-ADUser du module AD PowerShell pour effectuer les modifications).

# Iterating over all the rows in the array one by one
$ADUsers | ForEach-Object {
# In this example, the $_. statement means we are accessing the current row of the array You can get the value of a particular column from the current row by accessing it by the column name. For example, to display the ADLogin value from the current line:
Write-host $_.ADLogin
# Now we search for a user in AD by the value of the ADLogin column and change its attribute values:
Set-ADUser -Identity $_.AdLogin -MobilePhone $_.Phone –Department $_.Department –EmailAddress $_.Email
}

Vous pouvez remplacer ce script par un one-liner PowerShell plus compact :

Import-Csv C:PSmy_ad_users.csv | foreach {Set-ADUser -Identity $_.AdLogin -MobilePhone $_.Phone –Department $_.Department –EmailAddress $_.Email}

Parfois, vous trouverez peut-être le format ci-dessous plus pratique. Ici, nous accédons à la ligne actuelle du tableau via le$Uservariable que nous avons définie dans l'instruction ForEach :

ForEach ($User in $ADUsers){
$samaccountname = $User.ADlogin
$email = $user.Email
Write-host $samaccountname
Write-host $email
}

Dans certains cas, lors du traitement d'éléments de tableau à partir d'un fichier CSV, vous devrez peut-être ajouter une colonne supplémentaire au tableau. Par exemple, si vous souhaitez ajouter la date actuelle à l'objet $ADUsers :

$ADUsers | add-member -membertype NoteProperty -name Date -value (Get-Date -Format dd/MM/yyyy)

Voici d'autres scénarios dans lesquels vous pouvez utiliser l'applet de commande Import-CSV pour effectuer des opérations d'administration sur un grand nombre d'objets :

  • Exportez les boîtes aux lettres Exchange vers des fichiers PST :
    Import-CSV "C:psuser_to_export_pst.csv" | ForEach {New-MailboxExportRequest -Mailbox $_.username -FilePath $_.UNCPathtoPst
  • Ajouter des utilisateurs à un groupe de sécurité AD avec PowerShell : I
    mport-CSV .users.csv -Header users | ForEach-Object {Add-AdGroupMember -Identity ‘TestADGroup’ -members $_.users}
    Ou un cas similaire d'ajout d'utilisateurs à un groupe Microsoft Entra ID (Azure AD) :
    Import-CSV "C:PSadd_m365_members.csv" | ForEach-Object {
    Add-UnifiedGroupLinks –Identity it_dept –LinkType Members –Links $_.member
    }
  • Obtenez des informations sur l’utilisateur depuis AD :
    Import-Csv c:psusernsme_list.csv | ForEach {
    Get-ADUser -identity $_.user -Properties Name, telephoneNumber |
    Select Name, telephoneNumber |
    Export-CSV c:psexport_ad_list.csv -Append -Encoding UTF8
    }
    Ou utilisez Set-ADUser pour modifier les attributs d'utilisateurs spécifiques :Import-Csv "C:psmodifyad_users.csv" | foreach {Set-ADUser -Identity $_.SamAccountName –Title $_.Title -MobilePhone $_.MobilePhone}Mettre à jour les photos des utilisateurs dans Active Directory :
    Import-Csv C:PSimport.csv |%{Set-ADUser -Identity $_.AD_username -Replace @{thumbnailPhoto=([byte[]](Get-Content $_.Photo -Encoding byte))}}
  • Créez des utilisateurs groupés dans Active Directory à partir d'une liste dans un fichier CSV.

Related Posts