【发布时间】:2011-07-18 06:17:18
【问题描述】:
我有以下 JavaScript 在远程 Windows 主机上执行 WMI 查询:
var wmiLocator = WScript.CreateObject("WbemScripting.Swbemlocator");
var wmiService = wmiLocator.ConnectServer(host, "root\\cimv2", user, pass);
var items = wmiService.ExecQuery(query);
for(var e = new Enumerator(items); ! e.atEnd(); e.moveNext())
{
WScript.StdOut.Write(e.item().GetObjectText_());
}
user 和 pass 是远程 host 的登录凭据,query 是要执行的 WQL 查询。
在我将 WHERE 子句添加到 WQL 查询之前,这一切都很好。例如,
SELECT * FROM Win32_LogicalDisk
产生了预期的结果,但是
SELECT * FROM Win32_LogicalDisk WHERE DriveType=3
将导致“无效参数”错误 (wbemErrInvalidParameter / 0x80041008)。
我发现了许多使用 WHERE 子句的示例,但我找不到任何关于它不受支持的信息。我在这里遗漏了什么吗?
如果有任何相关性,执行此脚本的主机是带有 SP2 的 Windows XP Professional。
【问题讨论】:
-
查询字符串是如何构造的?您可以尝试一些事情,例如回显其值以查看它是否包含有效的查询字符串。您也可以尝试使用 wbemtest.exe 执行查询。
-
哦,天哪,这很尴尬......查询字符串实际上被打乱了,因为我之前所做的解析涉及“等号”符号。非常感谢!我相信这可以关闭。
-
然后将您的解决方案作为答案发布在下面,并将其标记为已接受。
标签: javascript wmi wmi-query wql wsh