如何使用 Microsoft.Management.Infrastructure (MMI) 而不是 System.Management 进行本地 WMI 查询

How to use Microsoft.Management.Infrastructure (MMI) instead of System.Management for local WMI queries

我有这个片段可以使用 WMIC

获取 Windows 版本
(from x in new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get().OfType<ManagementObject>()
                    select x.GetPropertyValue("Version")).FirstOrDefault().ToString();

由于 WMI 现在被认为是遗留的并且 .NET Core implementation of System.Configuration requires up-to-date .NET Framework,似乎需要使用 MMI 检索此信息。

令人惊讶的是,每个 Windows 需要访问 WMI 的问题都有类似于上面代码段的内容。看起来 MMI 的采用率还没有那么高,要找到一个好的 MMI 示例并不容易。

如何使用 Microsoft.Management.Infrastructure 来完成上面的代码?

CimSession.Create(null) // null instead of localhost which would otherwise require certain MMI services running
                .QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_OperatingSystem")
                .FirstOrDefault().CimInstanceProperties["Version"].Value.ToString();

.NET Core 的小提示:由于一些 ,我不得不将其添加到 csproj 文件(x86 用于我们的用例):

<RuntimeIdentifier>win7-x86</RuntimeIdentifier>