Python 使用wmi获取Windows远程端电脑磁盘使用情况
安装wmi包
pip install wmi
说明:执行上面命令会自动安装依赖包pywin32
代码演示
import json as JSON import reimport suds from suds.wsse import * import wmi
class WindowsDisListen(): """Windows系统""" def getSpaceInfo(self, P_IP, P_User, P_Pwd): # GB = 1024 ** 3 # total_b, used_b, free_b = shutil.disk_usage('C:') # 查看磁盘的使用情况 # print('总的磁盘空间: {:.2f}GB '.format(total_b / GB)) # print('已经使用的 : {:.2f}GB '.format(used_b / GB)) # print('未使用的 : {:.2f}GB '.format(free_b / GB)) IP, User, Pwd = P_IP, P_User, P_Pwd # 初始化返回数据格式 Ret = {"code": "0", "msg": "OK", "data": []} # 连接服务器 try: Win = wmi.WMI(computer=IP, user=User, password=Pwd) except Exception as e: Ret["code"] = "-1" Ret["msg"] = "目标服务器" + IP + "连接失败!" + str(e) return JSON.dumps(Ret, ensure_ascii=False) # 获取硬盘使用百分情况 GB = 1024 ** 3 Data = [] for Physical_Disk in Win.Win32_DiskDrive(): for Partition in Physical_Disk.associators("Win32_DiskDriveToDiskPartition"): for Logical_Disk in Partition.associators("Win32_LogicalDiskToPartition"): TmpDict = {} TmpDict["盘符"] = Logical_Disk.Caption TmpDict["总量"] = format(int(Logical_Disk.Size) / GB, '.2f') TmpDict["使用量"] = format((int(Logical_Disk.Size) - int(Logical_Disk.FreeSpace)) / GB, '.2f') TmpDict["空闲量"] = format(int(Logical_Disk.FreeSpace) / GB, '.2f') TmpDict["使用率"] = format(int(100.0 * (int(Logical_Disk.Size) - int(Logical_Disk.FreeSpace)) / int(Logical_Disk.Size)), '.2f') + "%" Data.append(TmpDict) Ret["data"] = Data return JSON.dumps(Ret, ensure_ascii=False) class Msg(): """短信接口""" @classmethod def sendListenMsg(cls, Contetn, Phone=""): """调用短信平台,发送短信""" Wsdl_Url = "http://100.169.130.50:57772/dthealth/web/wcw.soap.ShortMsg.cls?WSDL=1&CacheUserName=dhwebservice&CachePassword=dhwebservice&CacheNoRedirect=1" Soap = suds.Client(Wsdl_Url) # 设置Token安全登录验证 security = Security() token = UsernameToken('dhwebservice', 'dhwebservice') security.tokens.append(token) Soap.set_options(wsse=security) # 接收电话(多个手机号用","拼接) if Phone=="": Phone = "180***65,156***67,176***69" # 调用接口 Ret = Soap.service.sendMsg(Contetn, Phone) return Ret def runWindows(P_IP, P_User, P_Pwd): """执行Windows监测程序并发送预警短信""" IP, User, Pwd = P_IP, P_User, P_Pwd WinDis = WindowsDisListen() DataList = JSON.loads(WinDis.getSpaceInfo(IP, User, Pwd)) NeedSendCont = [] for Item in DataList["data"]: for Name, Value in Item.items(): if Name == "使用率" and float(Value.strip("%")) >= 90: NeedSendCont.append("【" + Item["盘符"] + "盘】空间使用率为【" + Item["使用率"] + "】,空间不足。") # 短息内容 MsgContent = "服务器监测预警:服务器" + IP + "".join(NeedSendCont) + "请及时报给信息科处理!" # 发短信 MsgRet = "" if len(NeedSendCont): MsgRet = Msg.sendListenMsg(MsgContent) if MsgRet == "1": MsgRet = "发送短信成功。" else: MsgRet = "未发送短信,或发送短信失败。" print(MsgRet + "短信内容为:" + MsgContent) if __name__ == '__main__': # 程序入口 runWindows("192.168.1.11", "Hisweb11", "Hisweb#2022#11")