【问题标题】:How can I query WMI GroupUser objects when a group name contains single quotes?当组名包含单引号时,如何查询 WMI GroupUser 对象?
【发布时间】:2015-10-28 03:25:58
【问题描述】:

这应该是一个微不足道的转义问题,但我不能像这样查询 WMI 的组:

SELECT * FROM WIN32_GroupUser WHERE GroupComponent="Win32_Group.Domain='TESTWIN7DEVEL-P',Name='Alaenna's Smile'"

这会返回一个 WMI 错误,如此处所示,使用 wbemtest:

我尝试使用反斜杠转义,如另一个 stackoverflow post 中所述:

SELECT * FROM WIN32_GroupUser WHERE GroupComponent="Win32_Group.Domain='TESTWIN7DEVEL-P',Name='Alaenna\'s Smile'"

这也行不通。从another article,我读到了以下内容:

\ 应解释为单反斜杠,而 \" 应解释为单引号

此查询成功,但返回零个结果。因为 Windows 组名称中不允许使用双引号,所以我无法创建测试组来查看查询是否正在拉取一个不存在的名为“Alaenna"s Smile”或其他名称的组:

SELECT * FROM WIN32_GroupUser WHERE GroupComponent="Win32_Group.Domain='TESTWIN7DEVEL-P',Name='Alaenna\"s Smile'"

我知道这个查询对不带引号的组按预期工作。以下是不带引号的示例查询和预期结果:

SELECT * FROM WIN32_GroupUser WHERE GroupComponent="Win32_Group.Domain='TESTWIN7DEVEL-P',Name='Administrators'"

如何使用上面的 WMI 查询转义单引号组名称?

这在代码中用于在 C# 中查询组的成员(例如“Alaenna's Smile”)。我对另一种可以完成获取所有系统组或类似的成员的解决方案感到满意。我只是认为这是最好、最直接的路线。

【问题讨论】:

    标签: c# wmi wql


    【解决方案1】:

    玩了一段时间后,我发现切换引用方案应该可以让你正确地逃避你正在寻找的东西。

    代替:

    SELECT * FROM WIN32_GroupUser WHERE GroupComponent="Win32_Group.Domain='TESTWIN7DEVEL-P',Name='Alaenna\'s Smile'"

    试试:

    SELECT * FROM WIN32_GroupUser WHERE GroupComponent='Win32_Group.Domain="TESTWIN7DEVEL-P",Name="Alaenna\'s Smile"'

    请注意,双引号和单引号实际上是交换的,除了在字符串 Alaenna's Smile 内。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 2021-03-19
      相关资源
      最近更新 更多