我与Active Directory对象具有不同的专有名称,并且在将这些dn拆分为简单名称时需要过滤掉转义字符。
我已经有一个-split
的PowerShell字符串,但这不能过滤掉转义字符。我已经尝试过使用正向后置式的正则表达式,但是在这种情况下我确实需要类似可选的正向后置式的东西吗?也许我只是想太复杂了。
字符串示例:
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
可以在$variable -creplace "REGEX"
中使用正则表达式,但是我找不到适合所有情况的正则表达式。
我的尝试是:(?<=OU=\\).+?(?=,OU=)
,但只有\
在这里才匹配
在Active Directory中创建对象时,我需要这个名称。
答案 0 :(得分:2)
只需最少的更改,您就可以在当前正则表达式中将斜杠添加为可选。您已经用逗号分隔了
"OU=\#External,OU=T1,OU=\+TE,DC=test,DC=dir" -split ',?..=\\?'
如果您只打算进入第一部分,则可以走得更远,但这可以回答您的基本问题。可能还有其他效率,但可能不值得。
答案 1 :(得分:2)
要从DN中提取第一个OU名称,同时删除可选的前导反斜杠,可以使用如下正则表达式:
OU=\\?(.*?), *..=.*$
演示:
$dn1 = 'OU=External,OU=T1,OU=\+TE,DC=test,DC=dir'
$dn2 = 'OU=\#External,OU=T1,OU=\+TE,DC=test,DC=dir'
$dn3 = 'OU=\+External,OU=T1,OU=\+TE,DC=test,DC=dir'
$dn1 -replace 'OU=\\?(.*?), *..=.*$', '$1' # output: External
$dn2 -replace 'OU=\\?(.*?), *..=.*$', '$1' # output: #External
$dn3 -replace 'OU=\\?(.*?), *..=.*$', '$1' # output: +External