Comment exporter des données vers des fichiers CSV avec PowerShell

Vous souhaitez exporter des données de PowerShell vers des fichiers CSV ? Ce n’est pas une opération que l’on effectue toutes les cinq minutes, mais lorsque vous avez besoin d’un rapport rapide ou que vous souhaitez simplement consigner des informations, la cmdlet Export-CSV est une véritable aubaine. Honnêtement, sa simplicité est surprenante, mais ces fichiers CSV peuvent vite devenir problématiques si l’on n’y prend pas garde : en-têtes manquants, délimiteurs incorrects, etc. Il arrive fréquemment que l’on exécute une commande sans se soucier de l’encodage ou du délimiteur, ce qui complique l’ouverture des fichiers dans Excel par la suite. Il est donc important de connaître les options à ajuster pour que vos données soient exportées correctement dès le premier essai et restent lisibles. La possibilité d’ajouter des lignes au lieu d’écraser les données existantes est également très pratique, notamment pour les scripts planifiés qui enregistrent des données en continu, comme l’espace disque ou les listes de processus. Une fois la technique maîtrisée, l’exportation d’informations système ou de toute autre donnée tabulaire devient beaucoup plus rapide et bien moins frustrante.

Comment exporter des données vers des fichiers CSV à l’aide de PowerShell

Méthode 1 : Exportation de base de la liste des services

Voici un exemple classique : vous souhaitez obtenir rapidement la liste de vos services Windows, avec leurs noms, noms d’affichage et statuts. C’est utile pour les audits ou le dépannage. La commande convertit les objets en chaînes de caractères séparées par des virgules, puis les enregistre dans un fichier CSV. Si vous n’utilisez pas l’ option `-NoTypeInformation`, vous obtiendrez un fichier volumineux contenant des informations sur le type des objets, parfois superflues et inutiles.

Get-Service | Select-Object Name, DisplayName, Status | Export-CSV "C:\PS\services.csv" -NoTypeInformation -Encoding UTF8

Sur certaines configurations, cela fonctionne parfaitement du premier coup. Toutefois, si vous ouvrez le fichier dans Excel et que la mise en forme est étrange, vérifiez le délimiteur. Par défaut, il s’agit de la virgule, mais si vos paramètres régionaux utilisent le point-virgule comme séparateur (comme c’est le cas pour de nombreuses langues européennes), vos données peuvent apparaître déformées ou brouillées. Dans ce cas, vous pouvez spécifier un autre délimiteur, comme le point-virgule, avec le paramètre `-Delimiter`.

Get-Service | Export-Csv "C:\PS\services.csv" -NoTypeInformation -Encoding UTF8 -Delimiter ";"

Et si vous devez gérer des paramètres régionaux, PowerShell peut les respecter grâce à l’ option -UseCulture ; vous n’avez donc généralement pas à vous soucier de modifier manuellement les délimiteurs :

Get-Process | Export-Csv "c:\ps\process.csv" -UseCulture

Pour vérifier quel est votre séparateur par défaut, exécutez :

(Get-Culture).TextInfo. ListSeparator

Il indique votre séparateur régional (probablement une virgule ou un point-virgule) ; il est bon de le garder à l’esprit lors du partage ou de l’analyse de fichiers CSV exportés.

Méthode 2 : Ajouter des données aux journaux en cours

Si vous exécutez des scripts qui génèrent des données périodiquement (espace disque disponible, statistiques réseau, comptes utilisateurs, etc.), vous souhaitez probablement ajouter ces données à un fichier CSV existant. C’est là que l’option `-Append` entre en jeu. Par défaut, PowerShell écrase les fichiers, mais grâce à `-Append`, vous pouvez ajouter de nouvelles lignes sans perdre les informations précédentes.

$cur_time = get-date -Format u $disks = Get-CimInstance -Class Win32_LogicalDisk | Where-Object { $_. DeviceID -eq "C:" } | Select-Object DeviceID, FreeSpace $disks | Add-Member -MemberType NoteProperty -Name Date -Value $cur_time $disks | Export-Csv -Path "C:\ps\freespace.csv" -Delimiter ";" -NoTypeInformation -Append 

En résumé, cette fonction ajoute un horodatage à l’objet d’informations du disque et l’intègre au fichier CSV. Pratique pour créer des journaux continus, comme l’historique d’utilisation du disque ou l’activité des utilisateurs lors de l’exécution de tâches planifiées.

Ajustements et options supplémentaires

  • -Encodage : J’utilise généralement UTF-8. Cela garantit la compatibilité, notamment pour les caractères spéciaux.
  • -Force : Utilisez cette option si vous écrasez un fichier en lecture seule et que vous ne voulez pas d’erreurs.
  • -NoClobber : Empêche l’écrasement accidentel de fichiers existants.
  • -En-tête : Ajoutez des en-têtes personnalisés si nécessaire, notamment lors de la fusion de fichiers ou du nettoyage de données.
  • -IncludeTypeInformation/-NoTypeInformation : Indique à PowerShell d’inclure ou d’ignorer la ligne #TYPE dans le fichier CSV — utile lors de l’importation dans d’autres outils.
  • -UseQuotes : Introduit dans PowerShell Core 7.x, il contrôle si les valeurs sont mises entre guillemets ou non, ce qui peut éviter la corruption des données si les champs contiennent des virgules ou des guillemets.

Ce dernier point peut vous éviter toutes sortes de cauchemars liés à l’analyse de fichiers CSV.

Essai de l’exportation au format CSV pour différents rapports

De l’audit des ordinateurs distants dans Active Directory à l’enregistrement des heures de connexion, en passant par l’exportation de l’historique des connexions RDP, la fonction d’exportation de PowerShell simplifie toutes ces tâches. Par exemple, vous pouvez exporter les informations des ordinateurs AD avec :

Get-ADComputer -Filter * | Select-Object Name, OperatingSystem, LastLogonDate | Export-CSV "C:\PS\ad_computers.csv" -NoTypeInformation

Vous pouvez également récupérer les journaux d’activité des utilisateurs, selon vos modules et autorisations. L’essentiel est d’adapter la commande à vos sources de données.

Et n’oubliez pas que vous pouvez toujours réimporter ce fichier CSV avec Import-CSV pour l’analyser ou le manipuler ultérieurement.

J’espère que cela vous évitera bien des tracas et rendra peut-être vos scripts un peu plus élégants. Définir les bonnes options dès le départ vous évitera bien des allers-retours par la suite.

Résumé

  • Utilisez Export-CSV pour exporter rapidement des données et générer des rapports.
  • N’oubliez pas de définir -Delimiter si vos paramètres régionaux n’utilisent pas de virgules.
  • Envisagez l’option « Ajouter » pour les journaux continus ou la collecte de données incrémentielle.
  • Jouez avec d’autres options comme -Encoding, -Force ou -UseQuotes pour obtenir la mise en forme correcte.
  • Presque tout peut être exporté : services, processus, informations AD ou journaux système.

Conclure

Exporter des données de PowerShell vers des fichiers CSV n’est pas sorcier, mais quelques subtilités peuvent déconcerter les débutants. Une fois les options de délimiteurs et d’encodage maîtrisées, le processus devient beaucoup plus simple. Le plus difficile est généralement de penser à ajuster ces paramètres en fonction de votre configuration régionale et des outils utilisés pour importer les données. Espérons que cela facilitera l’exportation et vous permettra de générer rapidement des rapports pratiques. Bonne chance et que vos fichiers soient toujours correctement formatés !