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

How can I query WMI GroupUser objects when a group name contains single quotes?

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

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

这是一个 returns WMI 错误,如此处所示,使用 wbemtest:

我尝试用反斜杠转义,如另一个 :

中所述

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

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

\ should be interpreted as a single backslash, and \" should be interpreted as a single quote

此查询成功,但 returns 结果为零。因为 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")。我会很高兴有另一个解决方案可以完成获取所有系统组或类似的成员。我只是认为这是最好、最直接的路线。

在试用了一段时间后,我发现切换引用方案应该可以让您正确地转义您要查找的内容。

而不是:

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.