我有一个来自AD的人员和他们的DN的列表(我不能直接访问该AD)。它们的DNs格式如下:
$DNList = 'CN=Bob Dylan,OU=Users,OU=Dept,OU=Agency,OU=NorthState,DC=myworld,DC=com',
'CN=Ray Charles,OU=Contractors,OU=Dept,OU=Agency,OU=NorthState,DC=myworld,DC=com',
'CN=Martin Sheen,OU=Users,OU=Dept,OU=Agency,OU=WaySouth,DC=myworld,DC=com'我想让$DNList返回以下内容:
OU=Users,OU=Dept,OU=Agency,OU=NorthState,DC=myworld,DC=com
OU=Contractors,OU=Dept,OU=Agency,OU=NorthState,DC=myworld,DC=com
OU=Users,OU=Dept,OU=Agency,OU=WaySouth,DC=myworld,DC=com发布于 2015-05-01 14:51:40
我决定把我的评论变成一个回答:
$DNList | ForEach-Object {
$_ -replace '^.+?(?<!\\),',''
}

这将正确地处理作为第一个组件的一部分的转义逗号。
我们在字符串的开头对一个或多个字符进行一个非贪婪的匹配,然后查找一个没有反斜杠的逗号(这样,这个点将匹配反斜杠和逗号组合并继续运行)。
发布于 2015-05-01 12:19:04
您可以使用这样的替换来删除第一个元素:
$DNList -replace '^.*?,(..=.*)$', '$1'^.*?,是从字符串开始到逗号的最短匹配。
(..=.*)$匹配字符串的其余部分(从逗号后面的两个字符开始,后面跟着一个=字符)并对它们进行分组,以便在替换中将匹配引用为$1。
发布于 2015-05-01 12:10:02
你每个用户有7个项目,逗号分开,你想摆脱第一个项目。
因此,使用逗号分隔符拆分数组中的每个项,返回匹配值1-6 (0是要跳过的第一项),然后再次使用逗号连接。
$DNList = $DNList|foreach{($_ -split ',')[1..6] -join ','}如果然后输入$DNList,它将返回
OU=Users,OU=Dept,OU=Agency,OU=NorthState,DC=myworld,DC=com
OU=Contractors,OU=Dept,OU=Agency,OU=NorthState,DC=myworld,DC=com
OU=Users,OU=Dept,OU=Agency,OU=WaySouth,DC=myworld,DC=comhttps://stackoverflow.com/questions/29986368
复制相似问题