WMI查询的select子句中的数学运算

时间:2012-06-15 11:47:17

标签: c# .net wmi console-application

在我的控制台应用程序(.NET)中,我按如下方式执行WMI查询:

ManagementObjectSearcher query;
        ObjectQuery oq;
        ManagementObjectCollection objectCollection;
        try
        {
            oq = new ObjectQuery("SELECT TotalVisibleMemorySize, FreePhysicalMemory FROM Win32_OperatingSystem");
            query = new ManagementObjectSearcher(oq);
            objectCollection = query.Get();
        }
        catch
        {
            return null;
        }
        return objectCollection;

我正在对收集的数据进行划分,以便在我的应用程序中使用。目前它对我来说非常合适。
我正在为我的应用程序使用多个wmi查询。为了使一个方法从config执行我所有的wmi查询,我需要在查询的select子句中进行除法。
我需要执行如下的WMI查询:

SELECT ((TotalVisibleMemorySize)/1024) as TotalVisibleMemorySize1, ((FreePhysicalMemory)/1024) as FreePhysicalMemory1 FROM Win32_OperatingSystem

对于此查询,我收到错误Invalid query 此查询中是否存在语法错误,或者是否无法在WMi查询的select子句中进行除法?

1 个答案:

答案 0 :(得分:2)

似乎WMI不支持复杂查询。您最好的选择是捕获wmi结果并根据需要进行转换:

foreach (ManagementObject mo in objectCollection)
{
Console.WriteLine("Total Memory = {0} MB", 
Convert.ToInt32(mo.GetPropertyValue("TotalVisibleMemorySize"))/1024);
}