使用 WMI 脚本类型库
可以使用 WMI 脚本类型库从 Microsoft Visual Studio 调用 WMI 脚本 API 方法,也可以在 Windows 脚本宿主 WSF 文件中调用。
备注
Visual InterDev 6.0 功能已集成到 Microsoft Visual Studio .NET 中。
以下过程介绍如何启用集成开发环境 (IDE) 以了解 WbemScripting 类型库。
将 WMI 脚本类型库添加到项目引用
从“项目”菜单中选择“添加引用”。
在“添加引用”框的“COM”选项卡中,选择“Microsoft WMI 脚本 V1.2 库”。
如果“引用”列表中没有出现合适的选项,请使用“引用”框中的“浏览”来进行添加。 “浏览”会打开“添加引用”框,使你能够找到 WbemScripting 类型库。
WbemScripting 类型库驻留在 %windir%\System32\Wbem 目录中的 Wbemdisp.tlb 文件中。
选择该文件,然后单击“打开”。 引用列表中出现了 Microsoft WMI 脚本 V1.2 库。 在此列表中确保选中此项旁边的框。
可以将对 WbemScripting.SWbemLocator 的引用纳入 Windows 脚本宿主 WSF 文件,这不同于以 Visual Basic Scripting Edition 或其他脚本语言编写的脚本。 这使你能够使用常量名称,而不是值。 例如,设置身份验证时,请使用 WbemAuthenticationLevelPktPrivacy,而非使用值 6。
可以使用以下方法将脚本与适用于 WMI 的脚本 API 类型库相连接:
在 VBScript 方法 CreateObject 和 GetObject 中指定 WbemScripting GUID。
这会提醒 Windows 脚本宿主连接到 WMI 对象集。
以下 VBScript 代码示例创建新的 SWbemDateTime 对象。
Set dateTime = CreateObject("WbemScripting.SWbemDateTime")
获取新的或现有的对象时,请使用名字对象字符串 "winmgmts:"。
以下 VBScript 代码示例使用 "winmgmts:" 名字对象获取 Handle 属性为 0(零)的 Win32_Process 实例。 Handle 是此类的键属性。
Set Process = GetObject("winmgmts:Win32_Process.Handle=0")
使用 WSH 2.0 XML 文件格式的 <reference> 标记引用 WMI 类型库。 如果使用 <reference> 标记,该标记必须具有值为 WMI 类型库的 GUID 的 uuid 属性,或(建议)具有对象属性,其值是可以创建的任何 WMI 脚本对象的 PROGID。
以下 VBScript 代码示例使用 "WbemScripting" 的 PROGID。 若要运行该脚本,请将文本保存在扩展名为 .wsf 的文件中。
<?xml version="1.0" encoding="US-ASCII"?> <job> <reference object="WbemScripting.SWbemLocator"/> <script language="VBScript"> set service = GetObject("winmgmts:") ' Following line uses a symbolic ' constant from the WMI type library service.Security_.impersonationLevel = _ wbemImpersonationLevelDelegate </script> </job>
使用 <object> 标记创建 WMI 脚本对象。 可以使用引用要创建的 WMI 脚本对象名称的值指定 id 属性,并且 progid 属性等于 WMI 脚本对象的 PROID。
以下 WSH 脚本显示本地计算机上的主机名和处理器数。 若要运行该脚本,请将文本保存在扩展名为 .wsf 的文件中。
<?xml version="1.0" encoding="US-ASCII"?> <job> <object id="objSWbemLocator" progid="WbemScripting.SWbemLocator"/> <script language="VBScript"> strComputer = "." Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, "root\cimv2") Set colSettings = objSWbemServices.ExecQuery("Select * From Win32_ComputerSystem") For Each objComputer in colSettings Wscript.Echo "System Name: " & objComputer.Name Wscript.Echo "Number of Processors: " & objComputer.NumberOfProcessors Next </script> </job>