我有与Active Directory对象不同的专有名称,将这些dn拆分为简单名称时需要过滤掉转义字符。
我已经有一个PowerShell的字符串-split
,但是这不能过滤掉转义字符。我已经尝试过使用正向后置式的正则表达式,但是在这种情况下,我确实需要像可选的正向后置式吗?也许我只是想太复杂了。
字符串示例:
OU=External,OU=T1,OU=\+TE,DC=test,DC=dir
OU=\#External,OU=T1,OU=\+TE,DC=test,DC=dir
OU=\+External,OU=T1,OU=\+TE,DC=test,DC=dir
因为
+
和#
已转义,但它们是这些对象的实际名称,所以我需要删除转义字符使用以下PowerShell,可以获取对象的名称
($variable -split ',*..=')[1]
实际结果:
External
\#External
\+External
预期结果:
External
#External
+External
可以将regex与
$variable -creplace "REGEX"
一起使用,但我找不到适合所有情况的正则表达式。我的尝试是:
(?<=OU=\\).+?(?=,OU=)
,但如果\
存在,则匹配我需要此名称来在Active Directory中创建对象。
最佳答案
只需最少的更改,您就可以在当前正则表达式中将斜杠添加为可选。您已经用逗号分隔了
"OU=\#External,OU=T1,OU=\+TE,DC=test,DC=dir" -split ',?..=\\?'
如果您只打算进入第一部分,则可以走得更远,但这可以回答您的基本问题。可能还有其他效率,但可能不值得。
关于regex - 使用RegEx匹配带有和不带有转义符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55813384/