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参数?
[RegEx]::Escape($members)
Run Code Online (Sandbox Code Playgroud)
这将确保字符串中的字符被解释为文字,而不是RegEx的一部分.
为了进一步解释,-match运算符正在进行正则表达式匹配,因此传递给它的字符串被解释为正则表达式.
反斜杠恰好是正则表达式中的转义字符,因此这就是问题所在.使用[RegEx]::Escape()确保了其他字符不会被解释,例如[,],.,+,(,),^,$,?,*,等.
| 归档时间: |
|
| 查看次数: |
3013 次 |
| 最近记录: |