使用replace运算符从字符串中删除多余的文本

时间:2013-04-23 16:26:37

标签: parsing powershell

我有一个表单

的Active Directory组名列表

cn=GROUPA,ou=Dept1,ou=Departmental Groups,ou=GROUPS1,dc=test,dc=server,dc=com

我想知道是否有办法使用-replace函数删除所有“ou =”和“dc =”部分。我知道我可以使用

-replace "ou=Dept1",""

但我想知道是否有一种方法可以在不知道Dept1部分的情况下替换“ou = Dept1”,因为并非所有的组名都包含Dept1,而是使用其他名称。我想也许某种方式将select-string-notlike一起使用,但我还没有找到方法。谢谢。

3 个答案:

答案 0 :(得分:1)

是的,只需使用替换...

$myOUString.Replace(",ou",",dc")

将替换每个,cn with,dn并且还会确保如果有一个组由于其他原因而包含ou,那么你就可以了,因为eaxample Thousands 不会成为 thdcsands

$myOuString -Replace ",ou",",dc" should also work.

无论如何,你的示例中不应该使用通配符,因为你不想用dc =

替换ou = ForgottenUsers

答案 1 :(得分:1)

删除所有ou =和dc =

-replace 'dc=.+?,|dc=.+$|ou=.+?,',''

它将为您留下cn=GROUPA,。如果你真的只想要cn部分,你可以做:

-match '(cn=.+?),' | Out-Null
$matches[1]

在问题的第二部分,您可以在不知道名称的情况下替换ou =部分:

-replace 'ou=.+?', 'ou=test,'

答案 2 :(得分:1)

从另一个方向来看:

-replace '.+?(dc=.+)','$1'