簡體   English   中英

如何使用 WMI -(Windows Management Instrumentation)從 python 腳本獲取遠程系統硬件信息

[英]How can I get remote system hardware information using WMI -( Windows Management Instrumentation) from python script

目的

編寫一個獲取遠程主機(僅限 Windows)硬件信息的 python 腳本,我使用 wmi 庫連接到遠程主機硬件信息:

GPU Serial Number
Operating system version
GPU model Name
processor name

我的環境

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

問題

當我運行下面的代碼時,它產生了 100 個類/函數,我什至不知道用它來滿足我的需要(獲取硬件信息)

代碼

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 ...... ...... ......

最終如何使用 wmi 庫或任何其他可能的方式遠程獲取遠程主機的硬件信息。

wmi文檔面向開發人員和 IT 管理員。 您需要知道在哪里可以找到合適的類及其所需的屬性。 以下注釋腳本可能會有所幫助。

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 )

請注意,只有硬件制造商實現了GPU 序列號才能PNPDeviceID提取

查看 PNPDeviceID 值,用“\\”將其分解。

  • 第一部分是總線類型。 對我來說,它是 PCI。
  • 第二部分描述卡。 有供應商代碼、型號等。
  • 最后一部分包含一個由與號分隔的數字。 序列號是該列表中的第二個數字,采用十六進制格式。

附加請求:監控序列號、服務標簽、型號名稱等詳細信息。

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 ) ) )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM