WMI / WQL查询powershell中的双反斜杠

时间:2015-07-09 17:31:10

标签: powershell wmi wql

我的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查询中生成。

2 个答案:

答案 0 :(得分:4)

如果你看about_wql,你会看到

  

WQL使用反斜杠()作为其转义       字符。这与Windows不同       PowerShell,它使用反引号       字符(`)。

在生成的查询中,您可以根据需要人为地添加带有简单替换的斜杠。

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

我确信$SCCMQuery只是一个测试示例,但查询必须放在某处的代码中。

答案 1 :(得分:3)

即使\只是PowerShell中的文字字符,它仍然是WQL中的转义字符

来自the specification

  

WQL使用[DMTF-DSP0004]中指定的术语和概念,   除非如下所述,并且需要熟悉CIM模型。   除了在LIKE子句中,服务器必须将反斜杠视为WQL查询中的转义字符。服务器必须处理文字   WQL数据中的字符串不区分大小写,与之相反   [DMTF-DSP0004]指定。

使用可以使用-replace运算符来转义反斜杠(请注意,-replace的第一个参数是一个正则表达式模式,它也将反斜杠视为转义字符):

$escapedWmiQueryValue = $WmiQueryValue -replace '\\','\\'