[英]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.