在WMI查询PowerShell中停止转义字符串的单引号

时间:2015-04-28 13:05:59

标签: powershell wmi

我有一些使用WMI查询的代码,但我遇到的问题是我使用的变量有'(单引号),导致代码出现故障

以下是一个例子:

$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

问题是共享名称包含'字符,因此它会出错。没有“正常工作”的路径

我尝试使用上面看到的替换,但这没有帮助

我尝试了各种报价组合,但我无法做到正确,有人可以提供帮助吗?

由于 本

3 个答案:

答案 0 :(得分:2)

您需要在WQL中转义该字符。触及这个的blog表示你可以用反斜杠来逃避它。

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

答案 1 :(得分: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

神秘解决了!

答案 2 :(得分:1)

在过滤字符串中使用双引号而不是单引号:

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

嵌套的双引号必须带有反引号,以便在双引号过滤字符串中对它们进行转义。