Comment puis-je obtenir des informations sur le matériel du système distant à l'aide de WMI - (Windows Management Instrumentation) à partir d'un script python


Praveen

Objectif

Pour écrire un script python qui récupère certaines informations matérielles des hôtes distants (Windows uniquement) et j'utilise la bibliothèque wmi pour me connecter aux informations matérielles de l'hôte distant:

GPU Serial Number
Operating system version
GPU model Name
processor name

Mon environnement

language - python 3
connecting remote hosts using wmi library (works)
remote hosts operating system: windows 7 or windows 10

Problème

Lorsque j'exécute le code ci-dessous, il produit des centaines de classes / fonctions, je n'ai même pas l'idée de l'utiliser pour répondre à mes besoins (obtenir ces informations sur le matériel)

Code

import wmi
conn = wmi.WMI() 
for classes in conn.classes :
    print(classes)
    ......
    ......
    ......
    Win32_VideoConfiguration
    Win32_LoggedOnUser
    CIM_CompatibleProduct
    Win32_PnPDevicePropertyReal64Array
    Win32_AccountSID
    MSFT_NetCircularDependencyDemand
    CIM_BootOSFromFS
    Msft_WmiProvider_GetObjectAsyncEvent_Post
    Win32_SystemSystemDriver
    CIM_InstIndication
    ......
    ......
    ......

Final Comment obtenir ces informations sur le matériel des hôtes distants à distance en utilisant la bibliothèque wmi ou par tout autre moyen possible.

JosefZ

La wmidocumentation est destinée aux développeurs et aux administrateurs informatiques. Vous devez savoir où trouver les classes appropriées et leurs propriétés souhaitées. Le script commenté suivant pourrait vous aider.

import wmi
conn = wmi.WMI()         # or # wmi.WMI("some_other_machine")

# Operating system & OS version
for os in conn.Win32_OperatingSystem():
    print( 'OS : ' + os.Caption + ", version " + os.Version )

# Processor name
for pr in conn.Win32_Processor():
    print( 'CPU: ' + pr.Name )

# GPU model Name
# GPU Serial Number - partial solution
for vc in conn.Win32_VideoController():
    print( 'GPU: ' + vc.Name + "\r\n     " + vc.PNPDeviceID )

Veuillez noter que le numéro de série du GPU ne peut être extraitPNPDeviceID que si le fabricant du matériel l'implémente:

En regardant la valeur PNPDeviceID, divisez-la par "\".

  • Le premier morceau est le type de bus. Pour moi, c'est PCI.
  • La deuxième section décrit la carte. Il y a un code fournisseur, un numéro de modèle, etc.
  • La dernière section contient un nombre séparé par des esperluettes. Le numéro de série est le deuxième numéro de cette liste, formaté en hexadécimal.

Demande supplémentaire: surveillez les détails comme le numéro de série, l'étiquette de service, le nom du modèle.

import wmi
conn = wmi.WMI()

# convert uint16[] array to string
def cnvrt( tup ): 
    return ''.join( [chr( x ) if x else '' for x in tup] )

# this is 'universal' DesktopMonitor (no useful details for Generic PnP Monitor?)
for umn in conn.Win32_DesktopMonitor():
    print( 'UMn: Name             {}'.format( umn.Name ) )
    print( 'UMn: PNPDeviceID      {}'.format( umn.PNPDeviceID ) )

# this is 'specific' DesktopMonitor (all useful details?)
con2 =  wmi.WMI(namespace='root/WMI')
for mon in con2.WmiMonitorID():
    print( 'Mon: Active           {}'.format(        mon.Active ) )
    print( 'Mon: InstanceName     {}'.format(        mon.InstanceName ) )
    print( 'Mon: ManufacturerName {}'.format( cnvrt( mon.ManufacturerName ) ) )
    print( 'Mon: ProductCodeID    {}'.format( cnvrt( mon.ProductCodeID    ) ) )
    print( 'Mon: SerialNumberID   {}'.format( cnvrt( mon.SerialNumberID   ) ) )
    print( 'Mon: UserFriendlyName {}'.format( cnvrt( mon.UserFriendlyName ) ) )

Articles connexes