-замена (значение) с escape-символом? - PullRequest
0 голосов
/ 01 апреля 2020

Мне нужно извлечь имена и фамилии из учетных записей, которые были очень плохо названы от предыдущего ИТ-администратора, и воссоздать их в том же подразделении источника. В имени учетной записи I есть символы, от которых я не могу справиться. Мне нужно вытащить First, Last и оставшееся DN, чтобы я мог восстановить учетную запись в той же структуре OU без. Для тестирования я использую только одного пользователя в одной OU, но там будет много разных структур OU. «\» и «(Vendor)» вызывают

Моя конечная цель - передать сценарию список DN учетных записей и воссоздать учетную запись без нежелательных «\» и «(vendor)» и выполнить сначала. последний или какой-то вариант этого.

$source = "CN=last\, first (Vendor),OU=vendors,DC=somecompany,DC=com"
$arg = "(vendor)"
($source -split ',*..=')[1].Remove($arg)

Я также пытался

($source -split ',*..=')[1] -replace "`(Vendor)'", ""

Скобки и \, кажется, вызывают все, что я пытался потерпеть неудачу. Я искал, и, похоже, не существует простого escape-символа, такого как ^ для пакетных файлов.

Ответы [ 3 ]

0 голосов
/ 01 апреля 2020

.remove () принимает число в качестве аргумента:

($source -split ',*..=')[1].Remove

OverloadDefinitions
-------------------
string Remove(int startIndex, int count)
string Remove(int startIndex)

Использование обратной косой черты для экранирования символов регулярного выражения:

($source -split ',*..=')[1] -replace "\(Vendor\)", ""

last\, first 

Подтверждено

[regex]::escape("(Vendor)") 

\(Vendor\)
0 голосов
/ 01 апреля 2020

Спасибо за всю помощь.

$source = "CN=Doe\, John (Vendor),OU=vendors,DC=somecompany,DC=com"
$r = ($source -split ',*..=|\\,').Replace("(Vendor)","").Where({ $_ -ne ''})
$first = $r[1].replace(" ","")
$last = $r[0].replace(" ","")
$DN = ($source -split "OU=",2)[1]
$DN = "OU=" + $DN
$first
$last
$DN
0 голосов
/ 01 апреля 2020

Обратный знак - это escape-символ, обычно используемый только для кода PowerShell. В регулярном выражении вы захотите удвоить обратную косую черту.

$source = "CN=last\, first (Vendor),OU=vendors,DC=somecompany,DC=com","CN=last\, first (Vendor),OU=vendors,DC=somecompany,DC=com"
$r = ($source[0] -split ',*..=|\\,').Replace("(Vendor)","").Where({ $_ -ne ''})
$r 

Для .remove() аргумент должен быть числом, числом или символами для отображения строки (и удаления каждого символа после указанного количества символов). Подача строки, когда он ожидает int, будет просто ошибкой, поэтому я использовал .replace().

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