主机性能监控之wmi 获取磁盘信息

标 题: 主机性能监控之wmi 获取磁盘信息
作 者: itdef
链 接: http://www.cnblogs.com/itdef/p/3990541.html 

欢迎转帖 请保持文本完整并注明出处

 

仅在《主机性能监控之wmi 获取系统信息及内存性能信息》 代码中添加一个函数

使用的结构体位为Win32_LogicalDisk

class Win32_LogicalDisk : CIM_LogicalDisk
{
  uint16 Access;
  uint16 Availability;
  uint64 BlockSize;
  string Caption;
  boolean Compressed;
  uint32 ConfigManagerErrorCode;
  boolean ConfigManagerUserConfig;
  string CreationClassName;
  string Description;
  string DeviceID;
  uint32 DriveType;
  boolean ErrorCleared;
  string ErrorDescription;
  string ErrorMethodology;
  string FileSystem;
  uint64 FreeSpace;
  datetime InstallDate;
  uint32 LastErrorCode;
  uint32 MaximumComponentLength;
  uint32 MediaType;
  string Name;
  uint64 NumberOfBlocks;
  string PNPDeviceID;
  uint16 PowerManagementCapabilities[];
  boolean PowerManagementSupported;
  string ProviderName;
  string Purpose;
  boolean QuotasDisabled;
  boolean QuotasIncomplete;
  boolean QuotasRebuilding;
  uint64 Size;
  string Status;
  uint16 StatusInfo;
  boolean SupportsDiskQuotas;
  boolean SupportsFileBasedCompression;
  string SystemCreationClassName;
  string SystemName;
  boolean VolumeDirty;
  string VolumeName;
  string VolumeSerialNumber;
};
View Code

 

添加的函数

bool CMyWMI::QueryDiskInfo()
{
    HRESULT hres; //定义COM调用的返回  
    IEnumWbemClassObject* pEnumerator = NULL;  
    bool bRet = false;

    try{
        hres = pSvc_->ExecQuery(  
            bstr_t("WQL"),     
            bstr_t("SELECT * FROM Win32_LogicalDisk"),  
            WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,   
            NULL,  
            &pEnumerator);  

        if (FAILED(hres))  
        {  
            throw exception("ExecQuery() error.");
        }  

        while (pEnumerator)  
        {
            IWbemClassObject *pclsObj;  
            ULONG uReturn = 0;  

            HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,   
                &pclsObj, &uReturn);  
            if(0 == uReturn)  
            {  
                break;  
            }  

            GetInfo(L"Name",pclsObj);
            GetInfo(L"VolumeName",pclsObj);
            GetInfo(L"FileSystem",pclsObj);
            GetInfo(L"VolumeSerialNumber",pclsObj);
            GetInfo(L"FreeSpace",pclsObj);

        

            ;


            cout << endl;

            pclsObj->Release(); 
        }


    }catch(exception& e)
    {
        cout << e.what() << endl;
        if(pEnumerator != NULL)
        {
            pEnumerator->Release(); 
            pEnumerator = NULL;
        }
        return bRet;
    }


    if(pEnumerator != NULL)
    {
        pEnumerator->Release(); 
        pEnumerator = NULL;
    }

    bRet = true;
    return bRet;
}
View Code

python 代码

 

#!/usr/bin/env python 
# -*- coding: cp936 -*-
 
import wmi 
import os 
import sys 
import platform 
import time

def disk_info():
    c = wmi.WMI()
    for p in c.Win32_LogicalDisk():
        print p.Name, p.VolumeName , p.FileSystem, p.FreeSpace


        
def main(): 
   disk_info();
 
if __name__ == '__main__': 
    main() 
View Code

 

posted on 2014-09-24 13:49  itdef  阅读(943)  评论(0编辑  收藏  举报

导航