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

WMI/WQL查询powershell中的双反斜杠,powershell,wmi,wql,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-WmiOb

我的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
中添加另一个反斜杠时,它开始工作


有人能告诉我为什么它是这样工作的吗?我无法手动将反斜杠放在所有值中,因为这些值稍后将从其他WMI查询中生成。

即使
\
在PowerShell中只是一个文字字符,但在WQL中仍然是一个转义字符

发件人:

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

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

如果你看,你会看到这一点

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

在生成的查询中,如果需要,只需人工添加带有简单替换的斜杠即可

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

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

但我在引号中输入的值类似于“a\100104”或“a\100104”。无论如何都要实现。在这种情况下,PowerShell不关心斜杠。。。WQL关心regardless@404单引号只能防止PowerShell解析器以这种或那种方式解释值,是WMI提供程序“误解”了您的意思。谢谢你的澄清。当前用户id类似于\100104。我必须通过where子句传入WMI。我不能去掉这个反斜杠。我需要找到一种方法,以便WMi能够理解它。是的,您是正确的,上面的查询只是一个例子。您能给我一些关于这个的例子吗?@404这取决于查询的来源以及您计划如何插入它。一个\100104也来自WMI查询。当我输出这个值时。它给了我一个\100104。现在我必须把它传递给另一个WQL。@404如果是这样的话,我不明白为什么我和Mathias的建议不起作用<代码>$resultofirstquery.replace(“\”,“\\”)。如果您对here字符串使用双引号,那么您可以直接在query中添加变量。它工作得很好,但我得到一个错误。异常设置“CurrentState”:“无法将挂起的值”转换为类型“System.UInt32”。错误:“输入字符串的格式不正确。”
$SCCMQuery.replace("\","\\")