【问题标题】:SWbemServices.ExecQuery - "Invalid Parameter" when adding a WHERE clauseSWbemServices.ExecQuery - 添加 WHERE 子句时出现“无效参数”
【发布时间】: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_());
}

userpass 是远程 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


【解决方案1】:

正如海伦所暗示的,我自己回答这个问题。

查询字符串被我之前在脚本中所做的一些解析更改,在语法上变得无效,因此出现无效参数错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 2019-06-30
    相关资源
    最近更新 更多