3

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

4

2 回答 2

6

如果你看看about_wql你会看到

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

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

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

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

于 2015-07-09T17:39:24.737 回答
3

尽管\只是 PowerShell 中的文字字符,但它仍然是 WQL 中的转义字符

规范

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

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

$escapedWmiQueryValue = $WmiQueryValue -replace '\\','\\'
于 2015-07-09T17:39:17.757 回答