[英]double backslash in WMI/WQL query powershell
我的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查询生成。
如果你看看about_wql,你会看到
WQL使用反斜杠()作为转义字符。 这与使用反引号字符(`)的Windows PowerShell不同。
在生成的查询中,如果需要,您可以通过简单替换人为地添加斜杠。
$SCCMQuery.replace("\","\\")
我确信$SCCMQuery
只是一个测试示例,但查询必须放在某处的代码中。
即使\\
只是PowerShell中的文字字符,它仍然是WQL中的转义字符 。
从规格 :
WQL使用[DMTF-DSP0004]中规定的术语和概念,除非如下所述,并且需要熟悉CIM模型。 除了在LIKE子句中之外,服务器必须将反斜杠视为WQL查询中的转义字符 。 服务器必须将WQL数据中的文字字符串视为不区分大小写,与[DMTF-DSP0004]指定的相反。
使用可以使用-replace
运算符来转义反斜杠(请注意, -replace
的第一个参数是一个正则表达式模式,它也将反斜杠视为转义字符):
$escapedWmiQueryValue = $WmiQueryValue -replace '\\','\\'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.