Points clés à retenir (TL;DR)
Synthèse exécutive- La console web de Lansweeper limite les exports ; les données, elles, vivent dans une base Microsoft SQL Server qu'on peut interroger directement.
- L'astuce centrale : exécuter le script sur le serveur Lansweeper lui‑même pour que Windows déchiffre tout seul la chaîne de connexion (DPAPl) — vous n'avez jamais à connaître ni saisir le mot de passe SQL.
- Résultat : un export CSV + Excel (.xlsx) complet du parc (postes, portables, serveurs, VM), sans installer le moindre module ni Excel sur le serveur.
- Le script ne contient aucun identifiant en dur : il relit la configuration chiffrée à chaque exécution. Opération strictement lecture seule.
- Une fois au point, on le planifie pour obtenir un inventaire frais à la demande — utile pour la sécurité, les licences et le renouvellement du matériel.

Le problème qu’on résout
Tôt ou tard, toute équipe TI a besoin d’un inventaire propre et exploitable de son parc : combien de machines, lesquelles, sous quel système, quel modèle, quel état, quelle fraîcheur de scan. Lansweeper collecte tout cela, mais sa console web ne permet pas toujours l’export exact que l’on veut, et les widgets sont vite limités dès qu’on cherche des colonnes précises ou un format figé pour un rapport.
La bonne nouvelle : les données sont déjà là. Lansweeper les stocke dans une base SQL Server. Il suffit donc de l’interroger directement et de mettre en forme le résultat. Le seul vrai obstacle technique : se connecter à la base sans connaître — ni exposer — le mot de passe SQL. C’est précisément ce que la méthode ci‑dessous règle élégamment.
L’astuce : laisser Windows déchiffrer la connexion pour vous
La chaîne de connexion (serveur SQL + identifiants) est stockée dans le fichier de configuration du site web Lansweeper :
C:\Program Files (x86)\Lansweeper\Website\web.config
…mais elle y est chiffrée, via le mécanisme DPAPI de Windows (fournisseur DataProtectionConfigurationProvider). Détail capital : ce chiffrement est lié à la machine. Autrement dit, seul le serveur qui a chiffré la chaîne peut la déchiffrer.
La conséquence est à notre avantage : si on exécute notre code sur le serveur Lansweeper, Windows/.NET déchiffre automatiquement la chaîne en mémoire dès qu’on la lit via l’API System.Configuration.ConfigurationManager. On n’a donc jamais à manipuler le mot de passe :
- ✅ On récupère la connexion sans taper de mot de passe.
- ✅ Le mot de passe n’est jamais affiché, journalisé ni écrit sur le disque.
- ✅ Le script ne contient aucun secret en dur : il relit le
web.configà chaque exécution.
⚠️ Revers volontaire : le script doit tourner sur le serveur Lansweeper, avec un compte administrateur local. Copié sur un poste ou lancé à distance, DPAPI ne pourra pas déchiffrer et l’opération échouera. C’est une protection, pas une limite : le secret ne « voyage » jamais.
Comment le script fonctionne, en trois temps
1) Lire la connexion
Via ConfigurationManager, on ouvre le web.config et on lit l’entrée de connexion Lansweeper (la vraie chaîne est imbriquée dans une sous‑clé ConnectionString). Windows la déchiffre en mémoire au moment de la lecture.
2) Interroger la base
Une requête SQL joint les tables clés du schéma Lansweeper :
| Table | Ce qu’elle contient |
|---|---|
tblAssets |
Infos réseau/matériel de base : nom, IP, MAC, dates de scan, RAM, CPU… |
tblAssetCustom |
Champs « métier » : fabricant, modèle, n° de série, localisation, état |
tblOperatingsystem |
Le système d’exploitation |
tsysassettypes |
Le libellé du type d’asset (Windows, Linux, Serveur…) |
tblState |
Le libellé de l’état (1 = Actif, 2 = Non‑actif, 9 = Stock…) |
3) Écrire les fichiers
On produit un CSV (natif PowerShell) et un XLSX généré par un mini‑écrivain OpenXML utilisant System.IO.Packaging, présent d’office dans Windows. Résultat : un vrai fichier Excel sans aucun module tiers (ni ImportExcel, ni Excel installé).
Prérequis
- Une session RDP sur le serveur Lansweeper.
- Un compte administrateur local sur ce serveur (nécessaire pour lire le
web.configet laisser DPAPI déchiffrer). - Rien d’autre : ni Excel, ni module PowerShell, ni
sqlcmd.
Procédure
- Ouvrez une session RDP sur le serveur Lansweeper.
- Déposez le script, par ex. dans
C:\Temp\Export-Inventaire.ps1. - Lancez PowerShell en tant qu’administrateur.
- Autorisez l’exécution pour la session courante :
Set-ExecutionPolicy -Scope Process Bypass. - Exécutez :
.\Export-Inventaire.ps1. - Récupérez le
inventaire.csvet leinventaire.xlsxdans le dossier de sortie.
Le script (version commentée)
Ci‑dessous une version simplifiée mais fonctionnelle. Les paramètres du haut sont les seuls à adapter à votre environnement ; aucune donnée sensible n’y figure.
# ===================== PARAMÈTRES =====================
$ConfigWeb = "C:\Program Files (x86)\Lansweeper\Website\web.config"
$NomChaine = "lansweeper" # nom de la ConnectionString dans le web.config
$Sortie = "C:\Temp" # dossier de sortie
# =======================================================
Add-Type -AssemblyName System.Configuration
# 1) Lire la chaîne de connexion (Windows la déchiffre en mémoire)
$map = New-Object System.Configuration.ExeConfigurationFileMap
$map.ExeConfigFilename = $ConfigWeb
$cfg = [System.Configuration.ConfigurationManager]::OpenMappedExeConfiguration($map,'None')
$conn = $cfg.ConnectionStrings.ConnectionStrings[$NomChaine].ConnectionString
if (-not $conn) { throw "ConnectionString '$NomChaine' introuvable dans $ConfigWeb" }
# 2) Requête d'inventaire (lecture seule)
$sql = @"
SELECT a.AssetName AS Nom,
a.IPAddress AS IP,
a.Mac AS MAC,
t.AssetTypename AS Type,
os.OSname AS SystemeExploitation,
c.Manufacturer AS Fabricant,
c.Model AS Modele,
c.Serialnumber AS NoSerie,
c.Location AS Localisation,
st.Statename AS Etat,
a.Lastseen AS DernierScan
FROM tblAssets a
LEFT JOIN tblAssetCustom c ON c.AssetID = a.AssetID
LEFT JOIN tblOperatingsystem os ON os.AssetID = a.AssetID
LEFT JOIN tsysassettypes t ON t.AssetType = a.Assettype
LEFT JOIN tblState st ON st.State = c.State
ORDER BY a.AssetName
"@
$cn = New-Object System.Data.SqlClient.SqlConnection $conn
$cn.Open()
$cmd = $cn.CreateCommand(); $cmd.CommandText = $sql
$da = New-Object System.Data.SqlClient.SqlDataAdapter $cmd
$dt = New-Object System.Data.DataTable
[void]$da.Fill($dt)
$cn.Close()
# 3) Export CSV (le XLSX peut se construire via System.IO.Packaging)
$csv = Join-Path $Sortie "inventaire.csv"
$dt | Export-Csv $csv -NoTypeInformation -Encoding UTF8
Write-Host "Export terminé : $($dt.Rows.Count) machines -> $csv"
Pour le fichier Excel, on ajoute un petit générateur OpenXML (quelques dizaines de lignes utilisant System.IO.Packaging) qui écrit un .xlsx valide à partir de la même DataTable — sans dépendance externe. L’idée reste la même : une requête, une table en mémoire, deux formats de sortie.
Contenu du fichier généré
Vous obtenez un tableau prêt à filtrer et à trier : nom de machine, IP, MAC, type d’asset, système d’exploitation, fabricant, modèle, numéro de série, localisation, état et date du dernier scan. À partir de là, vous répondez en quelques secondes à des questions concrètes : « combien de serveurs Windows obsolètes ? », « quelles machines n’ont pas été vues depuis 30 jours ? », « quel parc par site ? ».
Vérifier la fraîcheur des scans
Un inventaire ne vaut que s’il est à jour. Ajoutez une colonne « jours depuis le dernier scan » (différence entre la date du jour et Lastseen) et triez : toute machine « vue » il y a trop longtemps signale soit un appareil éteint/retiré, soit un agent de scan en panne. C’est un excellent indicateur de santé — et un moyen de repérer des équipements oubliés sur le réseau.
Planifier l’export (optionnel mais recommandé)
Pour disposer d’un inventaire frais sans y penser, enregistrez une tâche planifiée Windows qui lance le script, par exemple chaque matin :
$action = New-ScheduledTaskAction -Execute "powershell.exe" `
-Argument "-ExecutionPolicy Bypass -File C:\Temp\Export-Inventaire.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 6am
Register-ScheduledTask -TaskName "Export inventaire parc" -Action $action -Trigger $trigger -RunLevel Highest
La tâche doit s’exécuter sous un compte administrateur local du serveur, pour que DPAPI puisse déchiffrer la chaîne.
Dépannage
| Symptôme | Cause probable | Solution |
|---|---|---|
| « Impossible de déchiffrer » / chaîne vide | Script lancé à distance ou sur une autre machine | Exécuter directement sur le serveur Lansweeper |
Accès refusé au web.config |
PowerShell non administrateur | Relancer « en tant qu’administrateur » |
| 0 ligne exportée | Nom de ConnectionString ou schéma différent | Vérifier $NomChaine et l’existence des tables |
| Erreur sur une colonne | Version de Lansweeper au schéma légèrement différent | Retirer/renommer la colonne concernée dans la requête |
Sécurité : les bonnes pratiques respectées
- Aucun mot de passe en clair, nulle part — le secret reste géré par Windows.
- Opération lecture seule : on interroge la base, on ne la modifie jamais.
- Exécution locale et administrée : la protection DPAPI garantit qu’un script copié ailleurs ne fonctionnera pas, ce qui limite tout risque de fuite.
- Pensez à restreindre l’accès aux fichiers d’export (ils contiennent la cartographie de votre parc).
À retenir
Pour un inventaire fiable, complet et récurrent de votre parc informatique, inutile d’acheter un module d’export : la base SQL de Lansweeper contient déjà tout. En exécutant un court script PowerShell sur le serveur, vous obtenez un CSV et un Excel complets — sans mot de passe, sans module, en lecture seule — puis vous le planifiez pour un inventaire toujours à jour. C’est la base invisible d’une bonne gestion de parc : sécurité, correctifs, licences et renouvellement s’appuient tous dessus.
Vous voulez automatiser l’inventaire de votre parc et l’exploiter pour la sécurité, les licences et la planification du matériel ? Parlez à WeITSM.