无法使用C#从WWI访问Winsat数据

时间:2019-05-06 18:56:53

标签: c# .net wmi system.management

我正在尝试访问winsat数据。 WMI为此提供了一个类。

Win32_WinSAT

我正在尝试使用查询获取最新数据

"SELECT * FROM Win32_WinSAT WHERE TimeTaken='MostRecentAssessment'"

它将在PowerShell中甚至在WMIExplorer中正常工作 但是使用System.Management类在C#代码中不起作用

我的代码如下

class WinSatData
    {
        public double MemoryScore { get; set; }
        public double CPUScore { get; set; }
        public double D3DScore { get; set; }
        public double DiskScore { get; set; }
        public double GraphicsScore { get; set; }
    }
class Program
    {
        static void Main(string[] args)
        {
            List<WinSatData> winsat = new List<WinSatData>();
            ManagementScope scope = new ManagementScope("\\\\localhost\\root\\cimv2");
            scope.Connect();

            ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_WinSAT WHERE TimeTaken='MostRecentAssessment'");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
            ManagementObjectCollection collection = searcher.Get();

            foreach (ManagementObject m in collection) {
                WinSatData win = new WinSatData();
                win.CPUScore = (Convert.ToDouble(m["CPUScore"]));
                win.MemoryScore = (Convert.ToDouble(m["MemoryScore"]));
                win.D3DScore = (Convert.ToDouble(m["D3DScore"]));
                win.GraphicsScore = (Convert.ToDouble(m["GraphicsScore"]));
                winsat.Add(win);
            }
            string outout = JsonConvert.SerializeObject(winsat);
            Console.WriteLine(outout);
            Console.ReadKey();
        }
    }

管理对象中的所有值均为零。我仔细检查了ManagementObject m的属性。属性名称正确但值错误。

输出如下:

[{"MemoryScore":0.0,"CPUScore":0.0,"D3DScore":0.0,"DiskScore":0.0,"GraphicsScore":0.0}]

请帮助我访问WinSAT。

0 个答案:

没有答案
相关问题