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

Osc*_*ley 2 powershell escaping

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

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

    if ($result -match $members)
    {
        return $true
    }
    else
    {
        return $false
    }
}
Run Code Online (Sandbox Code Playgroud)

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

DETECTLocalUser "test" "iis apppool\userapi" 
Run Code Online (Sandbox Code Playgroud)

参数不受我控制.如果他们是我会直接逃脱第二个参数"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是可接受的还是有更好的方法来逃避$ members参数?

bri*_*ist 7

[RegEx]::Escape($members)
Run Code Online (Sandbox Code Playgroud)

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

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

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