Effectuer un inventaire automatisé des PC sur un réseau avec un script VBS

Catégorie < réseau >

1FORMATIK.com
Espace ~public
© 1998 - 2024

Sommaire

  • Préambule sur l'inventaire informatique des PC
  • Vidéo illustrative YouTube
  • Script VBS pour récupérer les spécifications matérielles et logicielles d'un PC
  • PsExec pour exécuter le script d'inventaire à distance

Information

Rédigé par Antoine
Publié le 2024-08-29
Modifié le 2024-08-29
507 affichages
4 likes
0 non-like

Préambule sur l'inventaire informatique des PC

Dans un environnement informatique, maintenir un inventaire précis des ordinateurs est crucial pour la gestion des actifs, la conformité et la planification des ressources.

Il existe plusieurs logiciels et utilitaires pour effectuer cette tâche ; vous pouvez en outre vous en passer en utilisant mon script VBS (Visual Basic Script), il permet d'automatiser le processus de collecte des informations d'un PC.

Le script récupère les informations détaillées sur chaque PC Windows, telles que les spécifications matérielles et les versions logicielles.

Lorsqu'il est exécuté sur un réseau, le script simplifie l'inventaire à grande échelle en recueillant automatiquement des données sur l'ensemble des PC du domaine, offrant ainsi une solution efficace et centralisée pour la gestion des infrastructures IT.

Vidéo illustrative via YouTube

Récupérer les spécifications matérielles et logicielles d'un PC

Le script VBS est conçu pour effectuer un inventaire détaillé d'un ordinateur, en recueillant diverses informations et en les sauvegardant dans un fichier texte sur le bureau de l'utilisateur.

Le script se connecte au service WMI (Windows Management Instrumentation), il permet d'accéder aux données système de Windows. Il collecte des informations telles que le nom de l'ordinateur, le fabricant, et le modèle, ainsi que le numéro de série du BIOS ce qui permet d'identifier de manière unique l'ordinateur.

Ensuite le script récupère des informations sur le matériel du PC, notamment la quantité totale de mémoire RAM, le type et la fréquence du processeur, ainsi que l'espace disque disponible sur chaque lecteur.

En plus des aspects matériels, le script vérifie également la version du système d'exploitation installé, ainsi que la présence et la version des applications dont le nom contient le mot Office ce qui permet de vérifier la présence de Microsoft Office, OpenOffice ou encore StarOffice.

Toutes ces informations sont compilées dans un fichier texte portant le nom de l'ordinateur et l'année en cours.

' Script VBS pour récupérer les spécifications matérielles et logicielles d'un PC
' Antoine @ www.1formatik.com

' On Définit les objets nécessaires
Set objetSystemeFichier = CreateObject("Scripting.FileSystemObject")
Set objetShell = CreateObject("WScript.Shell")
cheminBureau = objetShell.SpecialFolders("Desktop")

' On se connecte au service WMI
Set serviceWMI = GetObject("winmgmts:\.\root\cimv2")
Set collectionSysteme = serviceWMI.ExecQuery("Select * from Win32_ComputerSystem")
Set collectionBIOS = serviceWMI.ExecQuery("Select * from Win32_BIOS")
Set collectionOS = serviceWMI.ExecQuery("Select * from Win32_OperatingSystem")
Set collectionProcesseur = serviceWMI.ExecQuery("Select * from Win32_Processor")
Set collectionDisques = serviceWMI.ExecQuery("Select * from Win32_LogicalDisk Where DriveType=3")
Set collectionMemoire = serviceWMI.ExecQuery("Select * from Win32_PhysicalMemory")
Set collectionOffice = serviceWMI.ExecQuery("Select * from Win32_Product Where Name Like '%Office%'")

' On récupère le nom de l'ordinateur
Dim nomOrdinateur
For Each objetOrdinateur in collectionSysteme
nomOrdinateur = objetOrdinateur.Name
Next

' On récupère l'année actuelle
Dim anneeActuelle
anneeActuelle = Year(Now)

' On Crée et on ouvre le fichier texte sur le bureau avec comme nom le nom de l'ordinateur suivi de l'année en cours
Set fichierInventaire = objetSystemeFichier.CreateTextFile(cheminBureau & "\" & nomOrdinateur & "_" & anneeActuelle & ".txt", True)

' On écrit les informations dans le fichier texte
For Each objetOrdinateur in collectionSysteme
fichierInventaire.WriteLine "Nom de l'ordinateur: " & objetOrdinateur.Name
fichierInventaire.WriteLine "Fabricant: " & objetOrdinateur.Manufacturer
fichierInventaire.WriteLine "Modèle: " & objetOrdinateur.Model
Next

' On récupère les informations du processeur
For Each objetProcesseur in collectionProcesseur
fichierInventaire.WriteLine "Processeur: " & objetProcesseur.Name
fichierInventaire.WriteLine "Nombre de cœurs: " & objetProcesseur.NumberOfCores
fichierInventaire.WriteLine "Fréquence du CPU (MHz): " & objetProcesseur.MaxClockSpeed
Next

' On définit la variable pour agréger la mémoire
Dim capaciteTotaleMemoire
capaciteTotaleMemoire = 0

' On récupère les informations de la mémoire
For Each objetMemoire in collectionMemoire
capaciteTotaleMemoire = capaciteTotaleMemoire + Round(objetMemoire.Capacity / 1048576, 2)
Next

' On récupère la capacité totale de la mémoire (Mo) - Somme des capacités de chaque module de mémoire installé
fichierInventaire.WriteLine "Capacité totale de la mémoire (Mo): " & capaciteTotaleMemoire

' On récupère les informations des disques
For Each objetDisque in collectionDisques
fichierInventaire.WriteLine "Lecteur: " & objetDisque.DeviceID
fichierInventaire.WriteLine "Taille du disque (Go): " & Round(objetDisque.Size / 1073741824, 2)
fichierInventaire.WriteLine "Espace libre (Go): " & Round(objetDisque.FreeSpace / 1073741824, 2)
Next

' On récupère les informations du BIOS
For Each objetBIOS in collectionBIOS
' Le numéro de série correspond au numéro de série du BIOS ou de l'ordinateur.
fichierInventaire.WriteLine "Numéro de série (BIOS/Ordinateur): " & objetBIOS.SerialNumber
Next

' On récupère les informations du système d'exploitation
For Each objetOS in collectionOS
fichierInventaire.WriteLine "Système d'exploitation: " & objetOS.Caption
fichierInventaire.WriteLine "Version de l'OS: " & objetOS.Version
fichierInventaire.WriteLine "Architecture: " & objetOS.OSArchitecture
Next

' On récupère les informations sur les Apps qui contiennent le mot Office
If collectionOffice.Count > 0 Then
For Each objetOffice in collectionOffice
fichierInventaire.WriteLine "Office installé: " & objetOffice.Name
fichierInventaire.WriteLine "Version d'Office: " & objetOffice.Version
Next
Else
fichierInventaire.WriteLine "Microsoft/Open/Star Office n'est pas installé."
End If

' On ferme le fichier texte
fichierInventaire.Close

' On affiche le message de confirmation
WScript.Echo "L'inventaire du PC est sur le bureau sous le nom '" & nomOrdinateur & "_" & anneeActuelle & ".txt'."

PsExec pour exécuter le script d'inventaire à distance

PsExec est un outil gratuit de Sysinternals, c'est une suite d'utilitaires développés par Microsoft. Il permet d'exécuter des scripts et des commandes à distance sur d'autres ordinateurs du réseau.

Vous pouvez télécharger PsExec depuis le site officiel de Sysinternals sur https://learn.microsoft.com/fr-fr/sysinternals/downloads/psexec.

Il faut placer le script VBS sur un partage réseau qui est accessible par tous les ordinateurs du domaine.

Pour exécuter le script à distance vous devez ouvrir une invite de commande avec des privilèges d'administrateur puis utiliser la commande PsExec suivante pour exécuter le script sur chaque ordinateur cible :

psexec \NomOrdinateur -u Domaine\Utilisateur -p MotDePasse wscript.exe "\chemin\du\script.vbs"

Pour exécuter la commande en boucle sur plusieurs ordinateurs, vous pouvez créer un fichier batch (*.bat).

@echo off
for /f %%i in (liste_ordinateurs.txt) do (
psexec \%%i -u Domaine\Utilisateur -p MotDePasse wscript.exe "\chemin\du\script.vbs"
)
pause

Dans mon exemple le fichier liste_ordinateurs.txt est un fichier qui contient la liste des noms d'ordinateurs ou adresses IP, un par ligne.

Vous aurez bien evidemment besoin des privilèges administrateurs sur les ordinateurs cibles pour exécuter le script à distance. Assurez vous également que les pare-feu Windows sur les ordinateurs cibles permettent l'accès à distance et que l'exécution des scripts à distance est autorisée.

Il existe aussi d'autres solutions pour exécuter le script d'inventaire à distance. Vous pouvez utiliser une GPO pour déployer le script sur tous les ordinateurs d'une unité d'organisation dans Active Directory. Par ailleurs et si tous les ordinateurs du réseau ont PowerShell Remoting activé, vous pouvez utiliser PowerShell pour exécuter le script VBS sur plusieurs machines.

Ce contenu vous a-t-il été utile ?