我的WQL查询遇到了奇怪的问题。
sudo apt-get install mtpfs
以上查询无法正常工作,但当我在$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
)时,它就会开始工作。
有人可以告诉我为什么它会像这样工作吗?我无法手动将反斜杠放在所有值中,因为它们稍后会从其他WMI查询中生成。
答案 0 :(得分:4)
如果你看about_wql,你会看到
WQL使用反斜杠()作为其转义 字符。这与Windows不同 PowerShell,它使用反引号 字符(`)。
在生成的查询中,您可以根据需要人为地添加带有简单替换的斜杠。
$SCCMQuery.replace("\","\\")
我确信$SCCMQuery
只是一个测试示例,但查询必须放在某处的代码中。
答案 1 :(得分:3)
即使\
只是PowerShell中的文字字符,它仍然是WQL中的转义字符。
WQL使用[DMTF-DSP0004]中指定的术语和概念, 除非如下所述,并且需要熟悉CIM模型。 除了在LIKE子句中,服务器必须将反斜杠视为WQL查询中的转义字符。服务器必须处理文字 WQL数据中的字符串不区分大小写,与之相反 [DMTF-DSP0004]指定。
使用可以使用-replace
运算符来转义反斜杠(请注意,-replace
的第一个参数是一个正则表达式模式,它也将反斜杠视为转义字符):
$escapedWmiQueryValue = $WmiQueryValue -replace '\\','\\'