WQL(基本上是 WMI 的 SQL)不支持 TOP 或 LIMIT 关键字。Sql Server 使用 TOP 和许多其他 RDBMS 支持 LIMIT 等。
是否有一种解决方法来模拟 SELECT 查询,使其表现得好像它有一个 TOP/LIMIT 子句将结果集限制为某个任意数字?
或者是否有其他一些 WQL 特定的关键字,如 TOP 或 LIMIT?
不,没有办法单独使用 WQL 来模拟 TOP。
例外:如果您有幸查询了一个 WMI 类,该类使用了无间隙、升序的数字实例编号作为键,那么您可以使用大于和小于比较来限制和翻阅结果。
一旦收集到足够的实例,ManagementClass.GetInstances()可能会允许您在中途取消枚举,而不是使用 WQL 查询,从而避免一次性枚举整个列表的 CPU 和 RAM 成本。
请注意,AFAIK,CIMV2 WMI 提供程序本身并不处理 WQL——相反,它仅依赖 WMI 枚举所有实例、处理 WQL,并在将结果返回给调用者之前对其进行过滤。但昂贵的部分(实际上是获取底层 WMI 数据)仍然完成。因此,我相信通过使用 WQL 与使用 GetInstances() 并自己过滤结果并没有提高效率(对于本地 WMI 查询)——如果 GetInstances() 允许您中途取消,那么 GetInstances()对于长结果集可能要便宜得多。
用“select xyz -First 1”管道它
eg: Get-WmiObject win32_logicaldisk |select -First 1
正如贾斯汀所说。不过,我不确定您的确切要求。我正在使用 Visual Basic 做一个简单的项目,其中一部分是获取事件日志,由于应用程序日志(> 20MB)的巨大大小,列表视图失败,并且控件进入某种无限循环。我想限制所以这里是伪代码
topval = UserInputText.Text 'Assuming user entered the top 10 or 20
while ThereAreStillItemsInCollection
if topval = 0 then
goto CleanUpMemObjectsAndReturn
end if
topval = topval - 1
wend
CleanUpMemObjectsAndReturn:
set obj = Nothing
end sub