Les tâches WMI pour matériel informatique obtiennent des informations sur la présence, l’état ou les propriétés des composants matériels. Par exemple, vous pouvez déterminer si un ordinateur est un ordinateur de bureau ou un ordinateur portable. Pour obtenir d’autres exemples, consultez TechNet ScriptCenter à https://www.microsoft.com/technet.
Les exemples de script présentés dans cette rubrique obtiennent les données uniquement à partir de l’ordinateur local. Pour plus d’informations sur l’utilisation du script en vue d’obtenir des données d’ordinateurs distants, consultez Connexion à WMI sur un ordinateur distant.
Pour exécuter un script
La procédure suivante décrit comment exécuter un script.
Copiez le code et enregistrez-le dans un fichier avec l’extension .vbs, par exemple nomdefichier.vbs. Vérifiez que votre éditeur de texte n’ajoute pas d’extension .txt au fichier.
Ouvrez une fenêtre d’invite de commandes, puis accédez au répertoire où vous avez enregistré le fichier.
Tapez cscript nomfichier.vbs à l’invite de commandes.
Si vous ne pouvez pas accéder à un journal des événements, vérifiez si vous exécutez la commande à partir d’une invite de commandes avec élévation de privilèges. Certains journaux des événements, par exemple le journal des événements de sécurité, peuvent être protégés par la fonctionnalité UAC (contrôle de compte d’utilisateur).
Notes
Par défaut, cscript affiche la sortie d’un script dans la fenêtre d’invite de commandes. Dans la mesure où les scripts WMI peuvent produire de grandes quantités de données en sortie, vous pouvez être amené à rediriger la sortie vers un fichier. Tapez cscript nomfichier.vbs > fichiersortie.txtà l’invite de commandes pour rediriger la sortie du scriptnomfichier.vbs vers fichiersortie.txt.
Le tableau suivant liste des exemples de script qui peuvent être utilisés pour obtenir divers types de données à partir de l’ordinateur local.
Comment puis-je...
Classes ou méthodes WMI
... déterminer la quantité de mémoire libre d’un ordinateur ?
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colSettings
Wscript.Echo "Available Physical Memory: " & objOperatingSystem.FreePhysicalMemory
Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objComputer in colSettings
Wscript.Echo "System Name: " & objComputer.Name
Wscript.Echo "Number of Processors: " & objComputer.NumberOfProcessors
Next
PowerShell
"System Name : {0}" -f $system.Name
"Number of Processors: {0}" -f $system.NumberOfProcessors
... déterminer si un ordinateur dispose d’un emplacement PCMCIA ?
Utilisez la classe Win32_PCMCIAController et vérifiez la valeur de la propriété Count. Si Count a la valeur 0, l’ordinateur n’a pas d’emplacements PCMCIA.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_PCMCIAController")
Wscript.Echo "Number of PCMCIA slots: " & colItems.Count
if (!$pcmcia.count) {
"Number of PCMCIA Slots: {0}" -f 1
}else {
"Number of PCMCIA Slots: {0}" -f $pcmcia.count
}
... identifier les appareils qui ne fonctionnent pas (ceux marqués par une icône de point d’exclamation dans Gestionnaire de périphériques) ?
Utilisez la classe Win32_PnPEntity et utilisez la clause suivante dans votre requête WQL.
WHERE ConfigManagerErrorCode <> 0 Notez que ce code peut ne pas détecter les périphériques USB manquants.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_PnPEntity WHERE ConfigManagerErrorCode <> 0")
For Each objItem in colItems
Wscript.Echo "Class GUID: " & objItem.ClassGuid
Wscript.Echo "Description: " & objItem.Description
Wscript.Echo "Device ID: " & objItem.DeviceID
Wscript.Echo "Manufacturer: " & objItem.Manufacturer
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "PNP Device ID: " & objItem.PNPDeviceID
Wscript.Echo "Service: " & objItem.Service
Next
PowerShell
$baddevices = Get-WmiObject Win32_PNPEntity | where {$_.ConfigManagerErrorcode -ne 0}
" Total Bad devices: {0}" -f $baddevices.count
foreach ($device in $baddevices) {
"Name : {0}" -f $device.name
"Class Guid : {0}" -f $device.Classguid
"Description : {0}" -f $device.Description
"Device ID : {0}" -f $device.deviceid
"Manufacturer : {0}" -f $device.manufactuer
"PNP Devcice Id : {0}" -f $device.PNPDeviceID
"Service Name : {0}" -f $device.service
""
}
... déterminer les propriétés de la souris utilisée sur l’ordinateur ?
Utilisez la classe Win32_PointingDevice. Cela retourne les propriétés de tous les appareils de pointage, et pas seulement les souris.
... déterminer la vitesse d’un processeur installé sur un ordinateur ?
Utilisez la classe Win32_Processor et vérifier la valeur de la propriété MaxClockSpeed.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
For Each objItem in colItems
Wscript.Echo "Processor Id: " & objItem.ProcessorId
Wscript.Echo "Maximum Clock Speed: " & objItem.MaxClockSpeed
Next
... déterminer si un ordinateur est une tour, une mini-tour, un ordinateur portable, etc. ?
Utilisez la classe Win32_SystemEnclosure et vérifiez la valeur de la propriété ChassisType.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colChassis = objWMIService.ExecQuery("Select * from Win32_SystemEnclosure")
For Each objChassis in colChassis
For Each objItem in objChassis.ChassisTypes
Wscript.Echo "Chassis Type: " & objItem
Next
Next
... déterminer quel type d’appareil est branché sur un port USB ?
Utilisez la classe Win32_USBHub et vérifiez la propriété Description. Cette propriété peut avoir une valeur telle que « Appareil de stockage de masse » ou « Support d’impression ».
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_USBHub")
For Each objItem in colItems
Wscript.Echo "Device ID: " & objItem.DeviceID
Wscript.Echo "PNP Device ID: " & objItem.PNPDeviceID
Wscript.Echo "Description: " & objItem.Description
Wscript.Echo
Next
... déterminer le nombre de lecteurs de bande installés sur un ordinateur ?
Utilisez la classe Win32_TapeDrive classe, puis utilisez la méthode SWbemObjectSet.Count . Si Count = 0, aucun lecteur de bande n’est installé sur l’ordinateur.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_TapeDrive")
Wscript.Echo "Number of tape drives: " & colItems.Count
PowerShell
$colItems = Get-WmiObject -Class Win32_TapeDrive
foreach ($objItem in $colItems)
{
"Number of Drives: " + $colItems.Count
}
Exemples
L’exemple de code TechNet Gallery suivant décrit comment répertorier l’espace libre de tous les lecteurs pour plusieurs ordinateurs.