Двойная обратная косая черта в PowerShell WMI/WQL-запросов

Я столкнулся со странной проблемой с моим WQL-запросом.

$SCCMQuery = @'
Select UAR.User, UAR.Application, UAR.CurrentState from sms_fullcollectionmembership as FCM
INNER JOIN SMS_UserApplicationRequest as UAR ON UAR.User=FCM.SMSID
where FCM.CollectionID="a\100104"
'@
$Results = Get-WmiObject -Namespace "root\SMS\Site_Name" -Query $SCCMQuery

Вышеупомянутый запрос не работает должным образом, но когда я добавляю еще одну обратную косую черту в FCM.CollectionID как это(a\\100104) тогда это начинает работать.

Может кто-нибудь, пожалуйста, сообщите мне, почему это работает так? Я не могу вручную поставить обратную косую черту во всех значениях, так как они будут позже сгенерированы из другого запроса WMI.

2 ответа

Решение

Если вы посмотрите на about_wql, вы увидите, что

WQL использует обратную косую черту () в качестве escape-символа. Это отличается от Windows PowerShell, в которой используется символ обратной галочки (`).

В ваших сгенерированных запросах вы можете просто искусственно добавить косую черту с простой заменой, если хотите.

$SCCMQuery.replace("\","\\")

я уверен, что $SCCMQuery Это был всего лишь пример тестирования, но запрос должен быть размещен где-то в коде.

Даже если \ это просто буквальный символ в PowerShell, это все еще escape-символ в WQL.

Из спецификации:

WQL использует терминологию и понятия, как указано в [DMTF-DSP0004], за исключением случаев, указанных ниже, и требует знакомства с моделью CIM. Сервер ДОЛЖЕН обрабатывать обратную косую черту как escape-символ в запросе WQL, кроме как в предложении LIKE. Сервер ДОЛЖЕН обрабатывать литеральные строки в данных WQL без учета регистра, в отличие от того, что указано в [DMTF-DSP0004].

Использование можно использовать -replace оператор, чтобы избежать обратной косой черты (имейте в виду, что первый аргумент -replace шаблон регулярного выражения, который также обрабатывает обратную косую черту как escape-символ):

$escapedWmiQueryValue = $WmiQueryValue -replace '\\','\\'
Другие вопросы по тегам