带有可选列的 WQL SELECT

1 wmi wql

我需要进行这样的查询:

SELECT PNPDeviceID FROM Win32_NetworkAdapter WHERE AdapterTypeId = 0
Run Code Online (Sandbox Code Playgroud)

问题是,AdapterTypeId 列并不总是存在。在这种情况下,我只想要一切,就像这样:

SELECT PNPDeviceID FROM Win32_NetworkAdapter
Run Code Online (Sandbox Code Playgroud)

我的 WQL/SQL 知识极其有限。谁能告诉我如何在单个查询中做到这一点?

编辑:
似乎需要更多背景知识:我正在使用 WMI 查询 Windows 以获取设备信息,WMI 使用类似 SQL 的语法。因此,在我的示例中,我正在查询 AdapterTypeId 为 0 的网络适配器。
但是,该列并不总是存在,这意味着如果我枚举返回的值,则不会列出“AdapterTypeId”。

编辑 2:
将 SQL 更改为 WQL;显然这是更正确的。

Red*_*ter 5

我假设您的意思是底层架构不可靠。

这是一种非常非常规的情况。我建议您解决导致列不总是存在的问题,因为在您的应用程序下动态更改架构可能(几乎可以肯定)是灾难性的。

更新:

好的,WQL 允许您使用类似 SQL 的语法查询对象,但与 SQL 不同的是,模式可以在您的脚下更改。这是一个泄漏抽象的经典示例,我现在讨厌 WQL 却从未使用过它:)。

由于可用属性不断变化,我猜测 WQL 提供了一种枚举给定适配器属性的方法。这样做,并根据结果选择要运行的查询。

一些谷歌搜索后,有一个例子在这里,展示了如何通过枚举可用的属性这。您可以使用它来确定是否AdapterTypeId存在。