-用转义字符替换(值)?

-replace (value) with an escape char?

我需要从以前的 IT 管理员命名非常糟糕的帐户中提取名字和姓氏,并在同一源 OU 中重新创建它们。 我似乎无法通过帐户名中的字符。我需要提取 First、Last 和剩余的 DN,这样我就可以在没有的情况下在相同的 OU 结构中重新创建帐户。为了进行测试,我只在一个 OU 中使用一个用户,但会有许多不同的 OU 结构。 “\”和“(供应商)”导致

我的最终目标是向脚本提供一个帐户 DN 列表,并重新创建没有不需要的“\”和“(vendor)”的帐户,然后执行 first.last 或类似的变体。

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

我也试过了

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

括号和 \ 似乎导致我尝试的一切都失败了。我已经搜索过,似乎没有像 ^ 这样的简单转义字符用于批处理文件。

反引号是转义字符,通常只用于 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() 代替。

.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\)

感谢大家的帮助。

$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