天天看點

10、Python擷取window10 配置資訊

import wmi
import re
import win32com
############ 1. 擷取硬體資訊,輸出 macode
#   1.CPU序列号(ID) 2.本地連接配接 無線區域網路 以太網的MAC 3.硬碟序列号(唯一) 4.主機闆序列号(唯一)


s = wmi.WMI()
def get_memory_info():
    data = []
    # 這個子產品用SQL語言擷取資料
    wmi_service_obj = win32com.client.Dispatch("WbemScripting.SWbemLocator")
    wmi_service_connector = wmi_service_obj.ConnectServer(".", "root\cimv2")
    ram_collections = wmi_service_connector.ExecQuery("Select * from Win32_PhysicalMemory")
    for ram in ram_collections:  # 主機中存在很多根記憶體,要循環所有的記憶體資料
        ram_size = int(int(ram.Capacity) / (1024 ** 3))  # 轉換記憶體機關為GB
        item_data = {
            "slot": ram.DeviceLocator.strip(),
            "capacity": ram_size,
            "model": ram.Caption,
            "manufacturer": ram.Manufacturer,
            "sn": ram.SerialNumber,
        }
        data.append(item_data)  # 将每條記憶體的資訊,添加到一個清單裡

    return  data  # 再對data清單封裝一層,傳回一個字典,友善上級方法的調用

# cpu 序列号
def get_CPU_info():
    cpu = []
    cp = s.Win32_Processor()
    for u in cp:
        cpu.append(
            {
                "Name": u.Name,
                "Serial Number": u.ProcessorId,
                "CoreNum": u.NumberOfCores
            }
        )
    #   print(":::CPU info:", json.dumps(cpu))
    return cpu


# 硬碟序列号
def get_disk_info():
    disk = []
    for pd in s.Win32_DiskDrive():
        disk.append(
            {
                "Serial": s.Win32_PhysicalMedia()[0].SerialNumber.lstrip().rstrip(),  # 擷取硬碟序列号,調用另外一個win32 API
                "ID": pd.deviceid,
                "Caption": pd.Caption,
                "size": str(int(float(pd.Size) / 1024 / 1024 / 1024)) + "G"
            }
        )
    #   print(":::Disk info:", json.dumps(disk))
    return disk


# mac 位址(包括虛拟機的)
def get_network_info():
    network = []
    for nw in s.Win32_NetworkAdapterConfiguration():  # IPEnabled=0
        if nw.MACAddress != None:
            network.append(
                {
                    "MAC": nw.MACAddress,  # 無線區域網路擴充卡 WLAN 實體位址
                    "ip": nw.IPAddress
                }
            )
    #    print(":::Network info:", json.dumps(network))
    return network


# 主機闆序列号
def get_mainboard_info():
    mainboard = []
    for board_id in s.Win32_BaseBoard():
        mainboard.append(board_id.SerialNumber.strip().strip('.'))
    return mainboard

    #  由于機器碼太長,故選取機器碼字元串部分字元


#  E0:DB:55:B5:9C:16BFEBFBFF00040651W3P0VKEL6W8T1Z1.CN762063BN00A8
#  1 61 k 8Z
#     machinecode_str = ""
#     machinecode_str = machinecode_str+a[0]['MAC']+b[0]['Serial Number']+c[0]['Serial']+d[0]

# gpu序列号
def get_gpu_info():
    #for video in s.Win32_VideoController():
    #    print("video: %s" % video)  # caption屬性可以從1中得到

    gpuInfo=re.split('_|&',s.Win32_VideoController()[1].PNPDeviceID)
    return gpuInfo[1]+gpuInfo[3]+gpuInfo[5][4:8]+gpuInfo[5][0:4]


if __name__ == '__main__':
    print("get_disk_info Serial Number",get_disk_info()[0]["Serial"])
    print("get_CPU_info Serial Number",get_CPU_info()[0]['Serial Number'])
    print("get_network_info mac Number",get_network_info()[0]['MAC'])
    print("get_mainboard_info Serial Number",get_mainboard_info()[0])
    print("get_gpu_info Serial Number",get_gpu_info())
    print("get_memory_info Serial Number", get_memory_info())
    with open("test.txt", "w") as f:
        f.write("get_disk_info Serial Number "+str(get_disk_info()[0]["Serial"])+"\n")
        f.write("get_CPU_info Serial Number "+str(get_CPU_info()[0]['Serial Number'])+"\n")
        f.write("get_network_info mac Number "+str(get_network_info()[0]['MAC'])+"\n")
        f.write("get_mainboard_info Serial Number "+str(get_mainboard_info()[0])+"\n")
        f.write("get_gpu_info Serial Number "+str(get_gpu_info())+"\n")
        f.write("get_memory_info Serial Number "+ str(get_memory_info())+"\n")      
"C:\Program Files\Python36\python.exe" F:/sxj/untitled1/rename.py
get_disk_info Serial Number **AK****
get_CPU_info Serial Number **EBF*******906ED
get_network_info mac Number **:**:**:*0:00:01
get_mainboard_info Serial Number 1*****026302***
get_gpu_info Serial Number 10********770000      
F:\sxj\untitled1>pyinstaller -F collectcomputerInfo.py