6
votes

Comment puis-je utiliser Regex pour tirer simplement le CN à partir d'un nom distinctif avec PowerShell

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.

Je peux déchirer le CN avec ce xxx

mais après cela, je n'ai pas de bon moyen de déchirer tout de suite à partir de ", Ou "

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.


0 commentaires

6 Réponses :


11
votes
$s = "CN=Group Name I Want,OU=Group Container,DC=corp,DC=test,DC=local"
$s -replace "(CN=)(.*?),.*",'$2'

4 commentaires

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 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);



0
votes
$s = "CN=Group Name I Want,OU=Group Container,DC=corp,DC=test,DC=local"
$s1 = ($s -split ",*..=")[1]
$s1

0 commentaires

0
votes
$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?

0 commentaires

0
votes

Utilisation des différentes réponses de ce fil, j'ai proposé ce qui suit:

$ s = ($ s -split ", * .. =") [1]

$ s = $ s.remove ($ s.indexof ("\"), 1)

$ s


0 commentaires

0
votes
$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

0 commentaires

2
votes

une variante encore plus courte sur Réponse de Jon Z S:

$s = $s -replace '^CN=|,\S.*$'


0 commentaires