Как я могу запрашивать объекты WMI GroupUser, если имя группы содержит одинарные кавычки?

Это должно быть серьезно тривиальной проблемой экранирования, но я не могу запросить WMI для такой группы:

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

Это возвращает ошибку WMI, как показано здесь, используя wbemtest:

Ошибка WMI 1

Я попытался экранировать с помощью обратной косой черты, как описано в другом запись stackoverflow:

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

Это тоже не работает. Из другой статьи я прочитал следующее:

\ следует интерпретировать как одинарную обратную косую черту, а \" следует интерпретировать как одинарную кавычку.

Этот запрос выполнен успешно, но возвращает нулевые результаты. Поскольку двойные кавычки не разрешены в именах групп Windows, я не могу создать тестовую группу, чтобы увидеть, извлекает ли запрос несуществующую группу под названием «Улыбка Аленны» или что-то еще:

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

WMI пустой успех

Я точно знаю, что этот запрос работает по назначению с группами без кавычек. Ниже приведен пример запроса без кавычек и ожидаемых результатов:

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

Успешный пример запроса

Как избежать имени группы в одинарных кавычках с помощью приведенного выше запроса WMI?

Это используется в коде для запроса членов группы (например, «Улыбка Аленны») в C#. Я был бы счастлив с другим решением, которое может обеспечить получение членов всех системных групп или аналогичных. Я просто подумал, что это лучший, самый прямой маршрут.


person hakusaro    schedule 28.10.2015    source источник


Ответы (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.

person Ijwu    schedule 28.10.2015