2 votes

Regex dans PowerShell pour obtenir le nom de la ville à partir de la propriété Managedby dans Active Directory

Quelqu'un peut-il m'aider ? J'ai besoin de dériver un nom de ville à partir de l'attribut "managedby" dans Active Directory qui ressemble à ceci :

CN=Marley\, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com

Je dois donc tout enlever et me retrouver avec "PARIS"

Je ne m'y connais pas assez en Regex mais je suppose que cela va impliquer l'utilisation de -replace d'une manière ou d'une autre. J'ai essayé de suivre quelques exemples sur le web mais je me suis perdu. Je peux supprimer tous les caractères spéciaux en utilisant :

'CN=Marley\, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com' -replace '[\W]', ''

Mais je n'ai aucune idée de la manière de nettoyer cela davantage.

Toute aide serait grandement appréciée

2voto

Olaf Points 1246

En fait, vous n'avez pas besoin de regex pour cela. Si la structure du nom distinctif est toujours la même, vous pouvez utiliser des noms imbriqués de type -split ... comme ceci :

(('CN=Marley\, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com' -split '=')[3] -split ',')[0]

ou ceci :

(('CN=Marley\, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com' -split ',')[-3] -split '=')[1]

Je recommande la deuxième version, car elle permet d'éviter les confusions possibles avec les virgules dans la partie CN du nom distinctif ;-)

Si vous aimez le faire avec des expressions rationnelles, vous pouvez utiliser des contournements pour extraire ce qui se trouve entre l'OU des utilisateurs et le domaine, comme ceci :

'CN=Marley\, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com' -match '(?<=Users,OU=).+(?=,DC=DOmain)'
$Matches[0]

0voto

mklement0 Points 12597

Ce qui suit est une -replace -La solution basée sur l'hypothèse que le nom de la ville suit l'ordre des noms des villes. dernier ,OU= dans la chaîne d'entrée (bien qu'il ne soit pas difficile de rendre l'expression rationnelle plus spécifique).

Il prend également en charge les noms de ville échappés , caractères ( \, ), tels que PARIS\, Texas .

$str = 'CN=Marley\, Bob,OU=Users,OU=PARIS\, Texas,DC=Domain,DC=com' 
# -> 'PARIS, Texas'
$str -replace '.+,OU=(.+?),DC=.+', '$1' -replace '\\,', ','
  • .+,OU= fait correspondre avec avidité un ou plusieurs ( + ) des caractères arbitraires ( . ) jusqu'à la dernier ,OU= dans la chaîne d'entrée.

  • (.+?) correspond à un ou plusieurs caractères suivants non grégaire ( +? ), par l'intermédiaire d'un groupe de capture (sous-expression capturante, (...) ).

  • ,DC=.+ correspond à la prochaine occurrence de la chaîne de caractères ,DC suivi de ce qui reste dans la chaîne ( .+ ).

  • Notez que cela signifie que l'expression rationnelle correspond à l'élément entière de sorte que la valeur de l'expression de substitution, $1 est la seule chose renvoyée :

    • $1 fait référence à la valeur du premier groupe de capture, qui contient le nom de la ville.
  • En deuxième -replace L'opération permet de désencapsuler le \, c'est-à-dire qu'il le transforme en , - Remarquez que l'expression littérale \ à remplacer devait être échappé en tant que \\ dans l'expression rationnelle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X