J'ai un tas de chaînes qui sont DN de groupes d'une annonce. Je dois retirer le nom commun. Un exemple de chaîne est "cn = nom de groupe je veux, ou = conteneur de groupe, dc = corp, dc = test, dc = local"
Ce que je cherche est un code PowerShell qui tirera "nom de groupe que je veux" hors de cette chaîne et jetez le reste. p>
Je peux déchirer le CN avec ce p> mais après cela, je n'ai pas de bon moyen de déchirer tout de suite à partir de ", Ou " p> Je suis sûr qu'il y a une regex qui le fera, mais j'ai besoin d'aide de l'aide de l'aide. P> P>
6 Réponses :
$s = "CN=Group Name I Want,OU=Group Container,DC=corp,DC=test,DC=local" $s -replace "(CN=)(.*?),.*",'$2'
beaucoup plus propre que -split méthode
Vous devriez tenir compte d'un CN qui a une virgule dans le nom - par exemple. "CN = nom de famille \, premier, ou = groupe, dc = corp" - quelque chose comme "(cn =) (. *?) (?
Je ne suis pas sûr de pouvoir être d'accord avec cette méthodologie. Les données LDAP ne sont pas des chaînes, DNS en particulier sont de distinguéeName code> Syntaxe. Les substitutions de langue, les comparaisons et les opérateurs de commande ne doivent en général pas être utilisées avec des données extraites à partir d'un serveur d'annuaire, à moins que ces opérateurs ne prennent en charge l'utilisation des règles de commande et de correspondance, dans ce cas pour déterminer des substitutions.
Pour les personnes php, il y a: Preg_replace ('/ (cn =) (. *?) ,. * /', '$ 2', $ DN);
$s = "CN=Group Name I Want,OU=Group Container,DC=corp,DC=test,DC=local" $s1 = ($s -split ",*..=")[1] $s1
$s = "CN=Hall\, Jeremy,OU=Group Container,DC=corp,DC=test,DC=local" $s1 = ($s -split ",*..=")[1] $s1 This works for me - however, I have a \, left in name output. (I'm pulling the manager property from the get-aduser function and it prints the distinguishedName. Hall\, Jeremy is one example of what I'm left with. Anyone want to take a stab?
Utilisation des différentes réponses de ce fil, j'ai proposé ce qui suit: p>
$ s = ($ s -split ", * .. =") [1] p>
$ s = $ s.remove ($ s.indexof ("\"), 1) p>
$ s p>
$DN = Get-ADUser Username -Properties * | Select DistinguishedName | ForEach-Object {($_.DistinguishedName) -replace('\\','')} $OUTemp = $DN -creplace "^[^,]*,","" $OU = $OUTemp -creplace "^[^,]*,","" $OU This worked for me after lots of searching. I am not proud of the redundancy in lines 2 and 3 but I don't know how to make it work on a single line. The "-replace" at the end of the first line took care of DistinguishedNames that were formatted as CN=LastName\, FirstName when the \ escape character was present. It doesn't negatviely affect at name without out it.The results of my $OU is OU=ChildOU2,OU=ChildOU1,OU=ParentOU,DC=DOMAIN,DC=local
une variante encore plus courte sur Réponse de Jon Z S:
$s = $s -replace '^CN=|,\S.*$'