WQL(基本上是WMI的SQL)不支持TOP或LIMIT关键字。 Sql Server使用TOP和许多其他RDBMS支持LIMIT等。
是否有一种解决方法来模拟SELECT查询,就好像它有一个TOP / LIMIT子句将结果集限制为某个任意数字?
或者是否存在其他一些特定于WQL的关键字,其效果类似于TOP或LIMIT?
答案 0 :(得分:4)
不,没有办法单独使用WQL来模拟TOP。
例外:如果你很幸运能够查询一个没有空位的WMI类,用作键的升序数字实例数,那么你可以使用大于等于或小于那时的比较来限制和翻译结果。
有可能ManagementClass.GetInstances()而不是使用WQL查询可能允许您在收集到足够的实例后中途取消枚举,从而避免支付一次枚举整个列表的CPU和RAM成本。
请注意,AFAIK,CIMV2 WMI提供程序本身不处理WQL--而是依赖于WMI枚举所有实例,处理WQL,并在将结果返回给调用者之前过滤结果。但是昂贵的部分(实际上是获取底层WMI数据)仍然完成。所以我相信通过使用WQL而不是使用GetInstances()并自己过滤结果,没有效率增益(对于本地WMI查询) - 如果GetInstances()允许您在中途取消,那么GetInstances()对于长期结果集可能要便宜得多。
答案 1 :(得分:1)
使用“select xyz -First 1”
来管道它例如:Get-WmiObject win32_logicaldisk | select -First 1
答案 2 :(得分:1)
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