wmi模塊 / wmi Module
WMI (Windows Management Instrumentation) 模塊可用於獲取 Windows 內部信息。該模塊需要 win32com 的支持,環境安裝如下,
pip install wmi
pip install pypiwin32
模塊信息
WMI() 類
類實例化:w = wmi.WMI()
類的功能: 用於生成 WMI 的實例
傳入參數: 無
返回參數: w
Win32_Processor() 方法
函數調用: processorList = w.Win32_Processor()
函數功能: 用於獲取處理器信息對象,並存以列表形式
傳入參數: 無
返回參數: processorList
processorList: list類型,list中每個元素均為一個含cpu信息的object
cpu object通過object.name調用,所含信息包括:

instance of Win32_Processor { AddressWidth = 64; Architecture = 9; Availability = 3; Caption = "Intel64 Family 6 Model 78 Stepping 3"; CpuStatus = 1; CreationClassName = "Win32_Processor"; CurrentClockSpeed = 2376; CurrentVoltage = 9; DataWidth = 64; Description = "Intel64 Family 6 Model 78 Stepping 3"; DeviceID = "CPU0"; ExtClock = 100; Family = 205; L2CacheSize = 512; L3CacheSize = 3072; L3CacheSpeed = 0; Level = 6; LoadPercentage = 29; Manufacturer = "GenuineIntel"; MaxClockSpeed = 2401; Name = "Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz"; NumberOfCores = 2; NumberOfLogicalProcessors = 4; PowerManagementSupported = FALSE; ProcessorId = "BFEBFBFF000406E3"; ProcessorType = 3; Revision = 19971; Role = "CPU"; SocketDesignation = "U3E1"; Status = "OK"; StatusInfo = 3; SystemCreationClassName = "Win32_ComputerSystem"; SystemName = "CN00208511"; UpgradeMethod = 1; Version = ""; };
Win32_PhysicalMemory() 方法
函數調用: memModuleList = w.Win32_PhysicalMemory()
函數功能: 用於獲取物理內存信息對象,並存以列表形式
傳入參數: 無
返回參數: memModuleList
memModuleList: list 類型,list 中每個元素均為一個含物理內存信息的 object
物理內存 object 通過 object.name 調用,所含信息包括:

instance of Win32_PhysicalMemory { BankLabel = "ChannelA"; Capacity = "8589934592"; Caption = "Physical Memory"; CreationClassName = "Win32_PhysicalMemory"; DataWidth = 64; Description = "Physical Memory"; DeviceLocator = "Bottom-Slot 1(left)"; FormFactor = 12; InterleaveDataDepth = 0; InterleavePosition = 0; Manufacturer = "Hynix/Hyundai"; MemoryType = 0; Name = "Physical Memory"; PartNumber = "HMA81GS6AFR8N-UH "; PositionInRow = 1; SerialNumber = "28ECE200"; Speed = 2133; Tag = "Physical Memory 0"; TotalWidth = 64; TypeDetail = 16512; };
Win32_LogicalDisk () 方法
函數調用: diskList = w.Win32_LogicalDisk(DriverType=3)
函數功能:用於獲取磁盤信息對象,並存以列表形式
傳入參數: *argv
DriverType: int 類型,篩選驅動類型
返回參數: diskList
diskList: list類型,list 中每個元素均為一個含磁盤信息的object
磁盤信息 object 通過object.name調用,所含信息包括:

instance of Win32_LogicalDisk { Access = 0; Caption = "C:"; Compressed = FALSE; CreationClassName = "Win32_LogicalDisk"; Description = "Local Fixed Disk"; DeviceID = "C:"; DriveType = 3; FileSystem = "NTFS"; FreeSpace = "142053064704"; MaximumComponentLength = 255; MediaType = 12; Name = "C:"; Size = "228134481920"; SupportsDiskQuotas = FALSE; SupportsFileBasedCompression = TRUE; SystemCreationClassName = "Win32_ComputerSystem"; SystemName = "CN00208511"; VolumeName = "OSDisk"; VolumeSerialNumber = "3AFBC150"; }; instance of Win32_LogicalDisk { Access = 0; Caption = "D:"; Compressed = FALSE; CreationClassName = "Win32_LogicalDisk"; Description = "Local Fixed Disk"; DeviceID = "D:"; DriveType = 3; FileSystem = "FAT32"; FreeSpace = "1067384832"; MaximumComponentLength = 255; MediaType = 12; Name = "D:"; Size = "1069547520"; SupportsDiskQuotas = FALSE; SupportsFileBasedCompression = FALSE; SystemCreationClassName = "Win32_ComputerSystem"; SystemName = "CN00208511"; VolumeName = "HP_TOOLS"; VolumeSerialNumber = "B2FBEEA0"; }; instance of Win32_LogicalDisk { Access = 0; Caption = "E:"; Compressed = FALSE; CreationClassName = "Win32_LogicalDisk"; Description = "Local Fixed Disk"; DeviceID = "E:"; DriveType = 3; FileSystem = "NTFS"; FreeSpace = "21400256512"; MaximumComponentLength = 255; MediaType = 12; Name = "E:"; Size = "26843541504"; SupportsDiskQuotas = FALSE; SupportsFileBasedCompression = TRUE; SystemCreationClassName = "Win32_ComputerSystem"; SystemName = "CN00208511"; VolumeName = "HP_RECOVERY"; VolumeSerialNumber = "BCFC555B"; };
Win32_ NetworkAdapterConfiguration()方法
函數調用: interfaceList = w.Win32_NetworkAdapterConfiguration(IPEnabled=1)
函數功能: 用於網絡接口信息對象,並存以列表形式
傳入參數: *argv
IPEnabled: bool 類型,可傳入1,默認為False,為 True 將顯示 IP 信息
返回參數: interfaceList
interfaceList: list 類型,list 中每個元素均為一個網絡接口信息的 object
網絡接口信息 object 通過 object.name 調用,所含信息包括(部分具體信息已刪除):

instance of Win32_NetworkAdapterConfiguration { Caption = "[00000011] Intel(R) Dual Band Wireless-AC 8260"; DatabasePath = "%SystemRoot%\\System32\\drivers\\etc"; DefaultIPGateway = {"192.168.1.1"}; Description = "Intel(R) Dual Band Wireless-AC 8260"; DHCPEnabled = TRUE; DHCPLeaseExpires = "20170531002222.000000+480"; DHCPLeaseObtained = "20170530222222.000000+480"; DHCPServer = "192.168.1.1"; DNSDomain = "DHCP HOST"; DNSDomainSuffixSearchOrder = {"ericsson.se", "DHCP HOST"}; DNSEnabledForWINSResolution = FALSE; DNSHostName = ""; DNSServerSearchOrder = {"", ""}; DomainDNSRegistrationEnabled = FALSE; FullDNSRegistrationEnabled = TRUE; GatewayCostMetric = {0}; Index = 11; InterfaceIndex = 12; IPAddress = {"", ""}; IPConnectionMetric = 20; IPEnabled = TRUE; IPFilterSecurityEnabled = FALSE; IPSecPermitIPProtocols = {}; IPSecPermitTCPPorts = {}; IPSecPermitUDPPorts = {}; IPSubnet = {"", ""}; MACAddress = ""; ServiceName = "NETwNs64"; SettingID = "{}"; TcpipNetbiosOptions = 0; WINSEnableLMHostsLookup = TRUE; WINSScopeID = ""; };
利用wmi模塊獲取PC信息
獲取PC信息的步驟主要有:
(1)打開存儲信息的文件;
(2)實例化WMI類,利用各函數獲取硬件信息類的列表;
(3)遍歷硬件信息類列表,獲取硬件信息並寫入存儲文件。
1 import wmi 2 hardware=open('Hardware.txt', 'w') 3 4 w=wmi.WMI() 5 6 hardware.write("cpu type,main frequency:\n") 7 for processor in w.Win32_Processor(): 8 hardware.write("Processor ID: %s" % processor.DeviceID) 9 hardware.write("\nProcess Name: %s" % processor.Name.strip()+'\n\n') 10 hardware.write('Memory size:') 11 totalMemSize=0 12 for memModule in w.Win32_PhysicalMemory(): 13 totalMemSize+=int(memModule.Capacity) 14 hardware.write("\nMemory Capacity: %.2fMB" %((totalMemSize+1048575)/1048576)+'\n\n') 15 hardware.write('Hard disk usage:') 16 for disk in w.Win32_LogicalDisk (DriveType=3): 17 temp=disk.Caption+" %0.2f%% free" %(100.0 * int(disk.FreeSpace) / int(disk.Size)) 18 hardware.write('\n'+temp) 19 hardware.write('\n') 20 hardware.write('\nIP and MAC:\n') 21 for interface in w.Win32_NetworkAdapterConfiguration(IPEnabled=1): 22 hardware.write('Network card driver information:') 23 hardware.write(interface.Description+'\n') 24 hardware.write('Network card MAC address:') 25 hardware.write(interface.MACAddress+'\n') 26 hardware.write('IP address:') 27 hardware.write(interface.IPAddress[0]+'\n') 28 hardware.write('Network IP interface') 29 hardware.write(interface.IPAddress[1]+'\n') 30 hardware.close()
最終可以在當前目錄下得到一個包含硬件信息的文本文件。