0

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

我的最终目标是为脚本提供一个 Accounts 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)'", ""

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

4

3 回答 3

0

反引号是通常仅用于 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()改用它。

于 2020-03-31T21:29:52.750 回答
0

.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\)
于 2020-03-31T23:19:28.120 回答
0

感谢所有的帮助。

$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
于 2020-04-01T17:09:13.223 回答