python

在域环境下,可以通过命名空间+对方主机名的方式获取主机的配置信息

import wmi

# 在域环境内 可以直接通过命名空间+主机名的方式直接获取域中信任主机的配置信息
class ComputerMessage(object):

    Cname = ""
    namespace = ""
    client = ""
    msg = {}

    # 系统信息:系统版本,主机名,系统安装时间,系统位数,串口ID,总内存大小
    system = ['Caption', 'CSName', 'InstallDate', 'OSArchitecture', 'WindowsDirectory', 'SerialNumber']

    # # CPU
    cpu = ['Name']

    # # 内存参数:
    memory = ['Capacity','Manufacturer', 'PartNumber', 'SerialNumber', 'Speed', 'Tag', ]

    # # {盘符num:{磁盘型号,接口类型,磁盘容量}}
    disk = ['Caption', 'InterfaceType', 'Size']

    # #网卡信息 : 网关,网卡卡槽,是否开启DHCP,DNS,IPadd,MASk,MAC
    network = ['DefaultIPGateway', 'Description', 'DHCPEnabled', 'DNSServerSearchOrder', 'IPAddress', 'IPSubnet', 'MACAddress']

    # # BIOS 信息: BIOS版本,BIOS厂商
    bios = ['BIOSVersion', 'Manufacturer', ]

    def __init__(self, computername):
        self.Cname = computername
        self.namespace = "rootcimv2"
        self.client = wmi.WMI(computer=self.Cname,namespace=self.namespace)

    def GetSysMessage(self):
        system_msg = []
        for sys in self.client.Win32_OperatingSystem():
            for i in self.system:
                if i == 'InstallDate':
                    system_msg.append(getattr(sys,i).split('.')[0])
                elif i == 'TotalVisibleMemorySize':
                    system_msg.append("%sGB"% round(int(getattr(sys, i))/(1024*1024)))
                else:
                    system_msg.append(getattr(sys, i))
        self.msg["sys_msg"] = dict(zip(self.system, system_msg))

    def GetCpuMessage(self):
        for i in self.client.Win32_Processor():
            self.msg['cpu'] = i.name


    def GetMemoryMessage(self):
        m2 = {}
        for i in enumerate(self.client.Win32_PhysicalMemory()):
            m1 = []
            for i2 in self.memory:
                if i2 == 'Capacity':
                    m1.append(round(int(getattr(i[1], i2)) / 1024 / 1024 / 1024))
                elif i2 == 'PartNumber':
                    m1.append(getattr(i[1], i2).strip())
                else:
                    m1.append(getattr(i[1], i2))
            m2["memory%s"%i[0]] = dict(zip(self.memory, m1))
        self.msg.update(m2)

    def GetStorigeMessage(self):
        disk_count = {}
        for i in enumerate(self.client.Win32_DiskDrive()):
            disk_msg = []
            for i2 in self.disk:
                if i2 == 'Size':
                    disk_msg.append("%s GB" % round(int(getattr(i[1], i2))/(1024*1024*1024)))
                else:
                    disk_msg.append(getattr(i[1], i2))
            disk_count["disk%s" % i[0]] = dict(zip(self.disk, disk_msg))
        self.msg.update(disk_count)

    def GetNetworkMessage(self):
        n2 = {}
        for i in enumerate(self.client.Win32_NetworkAdapterConfiguration(IPEnabled=1)):
            n1 = []
            for i2 in self.network:

                if i2 == 'IPSubnet':
                    n1.append(getattr(i[1], i2)[0])
                elif i2 == 'IPAddress':
                    n1.append(getattr(i[1], i2)[0])
                elif i2 == 'DefaultIPGateway':
                    if getattr(i[1], i2) is not None:
                        n1.append(getattr(i[1], i2)[0])
                    else:
                        n1.append(getattr(i[1], i2))
                else:
                    n1.append(getattr(i[1], i2))
            n2["network%s" % i[0]] = dict(zip(self.network, n1))
        self.msg.update(n2)

    def GetBiosMessage(self):
        b = self.client.Win32_BIOS()
        b1 = []
        for i in b:
            for i2 in self.bios:
                b1.append(getattr(i, i2))
        self.msg['BIOS'] = dict(zip(self.bios,b1))


# ceshi = ComputerMessage("hequn")
# ceshi.GetMemoryMessage()
# print(ceshi.msg)
原文地址:https://www.cnblogs.com/Anec/p/13822150.html