I am facing weird issue with my WQL query.
$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
Above query is not working properly but when i add another backslash in FCM.CollectionID
like this(a\\100104
) then it start working.
Can somebody please advise me why it is working like this? I can't manually put the backslash in all the values as they will later be generated from other WMI query.
If you look at about_wql you will see that
WQL uses the backslash () as its escape
character. This is different from Windows
PowerShell, which uses the backtick
character (`).
In your generated queries you can just artificially add the slash with a simple replace if you wanted.
$SCCMQuery.replace("\","\\")
I am sure that $SCCMQuery
was just a testing example but the query has to be placed in the code somewhere.
Even though \
is just a literal character in PowerShell, it's still an escape character in WQL.
From the specification:
WQL uses terminologies and concepts, as specified in [DMTF-DSP0004],
except as noted below, and requires familiarity with the CIM model.
The server MUST treat a backslash as an escape character in a WQL query, except within a LIKE clause. The server MUST treat literal
strings in WQL data as case-insensitive, contrary to what
[DMTF-DSP0004] specifies.
Use can use the -replace
operator to escape the backslash (be aware that the first argument to -replace
is a regex pattern which also treats backslash as an escape character):
$escapedWmiQueryValue = $WmiQueryValue -replace '\\','\\'