如何在Powershell中转义参数内的字符?

时间:2014-08-07 15:12:27

标签: powershell escaping

这是我的功能的简化版本:

function DetectLocalUser($localGroup, $members)
{
    $result = net localgroup "$localGroup"
    #$members=  $members.Replace("\","\\")

    if ($result -match $members)
    {
        return $true
    }
    else
    {
        return $false
    }
}

要调用该函数,我使用此示例(我将接收的典型值):

DETECTLocalUser "test" "iis apppool\userapi" 

参数不受我控制。如果他们是我将直接逃脱第二个参数" iis apppool \\ userapi"

执行时我在参数中遇到问题。确切的错误是:

  

解析" iis apppool \ icisapi" - 无法识别的转义序列\ i。在   C:\ k \ a.ps1:6 char:9   + if($ result -match $ members)   + ~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:OperationStopped:(:) [],ArgumentException       + FullyQualifiedErrorId:System.ArgumentException

我找到了一个解决方法,添加#$members= $members.Replace("\","\\")修复了问题,但我不确定它是否是最佳选择。

我的workaroud是否可以接受,还是有更好的方式来转发$ member参数?

1 个答案:

答案 0 :(得分:7)

[RegEx]::Escape($members)

这将确保字符串中的字符被解释为文字,而不是RegEx的一部分。

为了进一步解释,-match运算符正在进行正则表达式匹配,因此传递给它的字符串被解释为正则表达式。

反斜杠恰好是正则表达式中的转义字符,因此问题出在哪里。使用[RegEx]::Escape()可确保不会解释其他字符,例如[].+()^$?*等。