【问题标题】:Stop a single quote from escaping a string in a WMI query powershell在 WMI 查询 powershell 中停止单引号转义字符串
【发布时间】:2015-07-07 08:40:43
【问题描述】:

我有一些使用 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

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

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

我尝试了各种引号组合,但我无法正确使用,有人可以帮忙吗?

谢谢 本

【问题讨论】:

    标签: powershell wmi


    【解决方案1】:

    您需要在 WQL 中转义该字符。涉及此问题的 blog 表示您可以使用反斜杠对其进行转义。

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

    【讨论】:

      【解决方案2】:

      糟糕,原来我应该使用 \ 而不是 `

      $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】:

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

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

        嵌套的双引号必须在前面加上反引号,以便在双引号过滤器字符串中转义它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-03-21
          • 2013-06-12
          • 1970-01-01
          • 2017-07-10
          • 2023-04-02
          相关资源
          最近更新 更多