Regex в PowerShell для получения названия города из свойства Managedby в Active Directory - PullRequest
2 голосов
/ 19 апреля 2020

Может кто-нибудь помочь мне с этим. Мне нужно получить название города из атрибута «managedby» в Active Directory, который выглядит следующим образом:

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

Так что мне нужно убрать все и оставить с "PARIS"

Я действительно не знаю достаточно о Regex, но предполагаю, что он собирается каким-то образом использовать -replace. Я попытался следовать некоторым примерам в Интернете, но я просто заблудился. Я могу удалить все специальные символы, используя:

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

Но я не знаю, как это исправить.

Любая помощь будет принята с благодарностью

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

На самом деле вам не нужно регулярное выражение для этого. Если структура отличительного имени всегда одна и та же, вы можете использовать вложенные -split s ... например:

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

или это:

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

Я бы порекомендовал вторая версия, потому что таким образом вы можете избежать путаницы с запятыми в части CN отличительного имени. ; -)

Если вы все равно хотите сделать это с помощью регулярных выражений, вы можете использовать обходные пути для извлечения того, что находится между OU пользователя и доменом, следующим образом:

'CN=Marley\, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com' -match '(?<=Users,OU=).+(?=,DC=DOmain)'
$Matches[0]
0 голосов
/ 19 апреля 2020

Ниже приведено решение на основе -replace, которое предполагает, что название города следует за последним ,OU= во входной строке (хотя это не составит труда сделать регулярное выражение более точным c).

Также поддерживаются названия городов с экранированными , символами (\,), такими как PARIS\, Texas.

$str = 'CN=Marley\, Bob,OU=Users,OU=PARIS\, Texas,DC=Domain,DC=com' 
# -> 'PARIS, Texas'
$str -replace '.+,OU=(.+?),DC=.+', '$1' -replace '\\,', ','
  • .+,OU= жадно сопоставляет один или несколько (+) произвольных символов (.) до подстроки last ,OU= во входной строке.

  • (.+?) соответствует одному или нескольким последующим символам без жадности (+?) через группу захвата (захват подвыражения, (...)).

  • ,DC=.+ соответствует следующему вхождению подстроки ,DC, за которой следует то, что осталось в строке (.+).

  • Обратите внимание, что это означает, что регулярное выражение соответствует вся строка, так что значение выражения подстановки, $1, является единственным возвращаемым значением:

    • $1 относится к th Значение 1-й группы захвата, которое содержит название города.
  • Операция second -replace отменяет экранирование \,, т. е. поворачивает его в , - обратите внимание, что заменяемый литерал \ должен был быть экранирован как \\ в регулярном выражении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...