第 5 课:使用 WMI 查询语言查找特定的信息

在 Windows Management Instrumentation (WMI) SDK 中,C++ Provider 对象、COM+ IWbemServices 对象和脚本 SWbemServices 对象都有一个名为 ExecQuery 的方法。可以使用该方法查询数据存储(如配置数据库),就像您可以查询 SQL 或 Access 数据库那样。查询字符串可以使用 WMI 查询语言 (WQL),在 WMI Development EnvironmentWMI Query Language 下的 WMI SDK 中有所解释。请首先阅读开始的三个文档,它们将指导您以 WQL 构建查询字符串,然后再阅读有关 Data Queries 的部分。

下面的代码示例使用 SELECT 语句枚举服务器上的所有服务。

VBScript
for each item in GetObject("winmgmts://MyMachine").ExecQuery("select * from win32_service")
WScript.Echo item.name
next
JScript
var e = new Enumerator(GetObject("winmgmts://MyMachine").ExecQuery("select * from win32_service"));
for(; ! e.atEnd(); e.moveNext())
{
x = e.item();
WScript.Echo(x.Name);
}

可以在 IIS WMI 提供程序中为对象执行相同的操作。下面的代码示例枚举了服务器上属于 CIM_Setting 类的对象的所有实例。

VBScript
for each item in GetObject("winmgmts://MyMachine/root/MicrosoftIISv2").ExecQuery("select * from CIM_Setting")
WScript.Echo item.name
next
JScript
var e = new Enumerator(GetObject("winmgmts://MyMachine/root/MicrosoftIISv2").ExecQuery("select * from CIM_Setting"));
for(; ! e.atEnd(); e.moveNext())
{
x = e.item();
WScript.Echo(x.Name);
}

另外再添加一些代码,就可以打印出每一个实例中的所有属性。使用了 on error resume next 命令,因为一些属性是对象阵列,并需要更多专门的代码才能将它们打印出来。

VBScript
on error resume next
for each item in GetObject("winmgmts://MyMachine/root/MicrosoftIISv2").ExecQuery("select * from CIM_Setting" )
WScript.Echo item.name
for each propSet in item.Properties_WScript.Echo " " & propSet.Name & " = " & propSet.Valuenext
next
JScript
var e = new Enumerator(GetObject("winmgmts://MyMachine/root/MicrosoftIISv2").ExecQuery("select * from CIM_Setting"));
for(; ! e.atEnd(); e.moveNext())
{
x = e.item();
WScript.Echo(x.Name);
var f = new Enumerator(x.Properties_)for(; ! f.atEnd(); f.moveNext()) {propSet = f.item();WScript.Echo(" " + propSet.Name + " = " + propSet.Value);}
}

有时服务器管理员需要查找其属性值是特定值的对象的实例。例如,要确定哪些虚拟目录有应用程序池,请使用下面的代码。

VBScript
for each item in GetObject("winmgmts://MyMachine/root/MicrosoftIISv2").ExecQuery("SELECT * FROM IIsWebVirtualDir WHERE AppIsolated = 2")
WScript.Echo item.name
next
JScript
var e = new Enumerator(GetObject("winmgmts://MyMachine/root/MicrosoftIISv2").ExecQuery("SELECT * FROM IIsWebVirtualDir WHERE AppIsolated = 2"));
for(; ! e.atEnd(); e.moveNext())
{
x = e.item();
WScript.Echo(x.Name);
}
相关主题

© 1997-2003 Microsoft Corporation。保留所有权利