2015-04-28 46 views
2

我有一些使用WMI查詢的代碼,但我遇到了一個問題,其中我使用的變量具有'(單引號),其中導致代碼以故障停止在WMI查詢powershell中轉義字符串的單引號

下面是一個例子:

$path = "\\SERVER1\Mike O'Leary$" 
$servername = $path.Split('\')[2].Split('\')[0] 
$sharename = $path -replace ".*\\" -replace "'", "`'" 
Get-WmiObject Win32_share -computer $servername -filter "name='$sharename'" | Select Name,Path 

的問題是,在共享名中含有「字符,因此出現了錯誤。沒有「路徑做工精細

我使用替換上面看到的,但這並不能幫助

我已經試過報價的各種組合,但我無法得到它的權利,任何人都可以幫助試過嗎?

感謝 本

回答

1

哎呀,原來我一直在使用,而不是`

$path = "\\SERVER1\Mike O'Leary$" 
$servername = $path.Split('\')[2].Split('\')[0] 
$sharename = $path -replace ".*\\" -replace "'", "\'" 
Get-WmiObject Win32_share -computer $servername -filter "name='$sharename'" | Select Name,Path 

解開了謎底\!

1

您需要在WQL中轉義該字符。接觸這個的blog說你可以用一個反斜槓來逃避它。

$sharename = $path -replace ".*\\" -replace "'", "\'" 
0

使用雙引號,而不是在你的過濾字符串單引號:

Get-WmiObject Win32_Share -Computer $servername -Filter "name=`"$sharename`"" | ... 

嵌套雙引號必須用反引號預先考慮到逃避他們雙引號過濾字符串內。