当组名包含单引号时,如何查询WMI GroupUser对象?

时间:2015-10-28 03:25:59

标签: c# wmi wql

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

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

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

WMI Failure 1

我尝试使用反斜杠转义,如另一个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'"

WMI empty success

我知道这个查询对没有引号的组有效。以下是没有引号和预期结果的示例查询:

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

Success example query

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

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

1 个答案:

答案 0 :(得分: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之外,双引号和单引号基本上都已切换。

相关问题