这是我的功能的简化版本:
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参数?
答案 0 :(得分:7)
[RegEx]::Escape($members)
这将确保字符串中的字符被解释为文字,而不是RegEx的一部分。
为了进一步解释,-match
运算符正在进行正则表达式匹配,因此传递给它的字符串被解释为正则表达式。
反斜杠恰好是正则表达式中的转义字符,因此问题出在哪里。使用[RegEx]::Escape()
可确保不会解释其他字符,例如[
,]
,.
,+
,(
, )
,^
,$
,?
,*
等。