【问题标题】:How to escape characters inside of a parameter in Powershell?如何在 Powershell 的参数中转义字符?
【发布时间】:2014-08-07 15:12:27
【问题描述】:

这是我的函数的简化版本:

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 字符:9 + if ($result -match $members) + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OperationStopped: (:) [], ArgumentException + FullyQualifiedErrorId : System.ArgumentException

我通过添加 #$members= $members.Replace("\","\\") 找到了解决方法,但我不确定是否是最佳选择。

我的工作方法可以接受还是有更好的方法来转义 $members 参数?

【问题讨论】:

    标签: powershell escaping


    【解决方案1】:
    [RegEx]::Escape($members)
    

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

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

    反斜杠恰好是正则表达式中的转义字符,所以这就是您的问题所在。使用[RegEx]::Escape()保证其他字符不会被解释,例如[,],.,+,(,),^,@9876543331@,@987654 @、*

    【讨论】:

    • 我测试了它,它运行良好。它比我的解决方法更好,因为它转义了所有特殊字符,我不需要自己重新编码该逻辑。助教!
    猜你喜欢
    • 1970-01-01
    • 2021-09-28
    • 2020-01-17
    • 2013-03-31
    • 2015-10-26
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    相关资源
    最近更新 更多