gpt4 book ai didi

wmi - 您如何查询WMI namespace ?

转载 作者:行者123 更新时间:2023-12-03 16:29:58 25 4
gpt4 key购买 nike

您如何查询WMI namespace ?

所以我知道WMI namespace ,因为我读到它们退出并且知道可以连接说:

root\cimv2

我的问题是,如果我不知道那里有什么命名空间,我将如何查询可用的命名空间?

我只是想去探索WMI,而不必查找每个 namespace 。

我正在使用WBEMtest,但我会使用.NET,winapi.h,这有什么用。

最佳答案

要枚举所有命名空间,必须首先连接到root命名空间,查询所有__NAMESPACE实例,然后为每个实例递归地重复此过程。

检查这些样本

德尔菲

procedure  GetListWMINameSpaces(const RootNameSpace:String;const List :TStrings;ReportException:Boolean=True);//recursive function
var
objSWbemLocator : OleVariant;
objWMIService : OleVariant;
colItems : OLEVariant;
colItem : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
sValue : string;
begin
try
objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
objWMIService := objSWbemLocator.ConnectServer(wbemLocalhost, RootNameSpace, '', '');
colItems := objWMIService.InstancesOf('__NAMESPACE');
oEnum := IUnknown(colItems._NewEnum) as IEnumVariant;
while oEnum.Next(1, colItem, iValue) = 0 do
begin
sValue:=VarStrNull(colItem.Name);
colItem:=Unassigned;
List.Add(RootNameSpace+'\'+sValue);
GetListWMINameSpaces(RootNameSpace+'\'+sValue,List);//recursive
end;
except
if ReportException then
raise;
end;
end;

VbScript
strComputer = "."
Call EnumNameSpaces("root")

Sub EnumNameSpaces(strNameSpace)
WScript.Echo strNameSpace
Set objWMIService = GetObject("winmgmts:\\" & strComputer & _
"\" & strNameSpace)
Set colNameSpaces = objWMIService.InstancesOf("__NAMESPACE")
For Each objNameSpace In colNameSpaces
Call EnumNameSpaces(strNameSpace & "\" & objNameSpace.Name)
Next
End Sub

关于wmi - 您如何查询WMI namespace ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5332501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com