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
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.
La wmi
documentation 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 ) ) )