PowerShell,用于从 Active Directory 中的 Managedby 属性中获取城市名称和人员名称



谁能帮我解决这个问题。我需要从 Active Directory 中的managedby属性中派生一个城市名称和人的全名,如下所示:

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

所以我需要把所有东西都拿出来,只剩下"Marley, Bob PARIS">

我可以把巴黎的位拿出来,但不能得到全名:

这会在输出中产生Paris

CN=Marley, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com' | %{(($_ -split ',')[-3] -split '=')[1]}

谁能帮我提取全名?

您可以将可分辨名称拆分为其单独的 RDN(相对区分名称(组件,然后从中选择所需的部分。

'CN=Marley, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com' -split ',s*(?<!\,s*)'

会回来

CN=马利\, 鲍勃 OU=用户 OU=巴黎 DC=域 DC=com

在您的情况下,您可以像这样使用:

$rdn = 'CN=Marley, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com' -split ',s*(?<!\,s*)'
'{0} {1}' -f (($rdn[0] -split '=')[1] -replace '\'), (($rdn[2] -split '=')[1])

返回

马利, 鲍勃·帕里斯

但是,仅当所有位置都存储在UsersOU 内的第一个子 OU 中时,这才有效。


如果您坚持在单行中尝试此操作,您也可以使用正则表达式-replace

'CN=Marley, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com' -replace '\' -replace 'CN=(.+),OU=.+OU=(.+)(,DC=.*){2,}$', '$1 $2'

它捕获第一个出现的操作CN=,该操作后必须,OU=回溯引用 1 ($1(。接下来,它捕获第二次出现的OU=,后跟反向引用2 ($2中的,DC=

简而言之:如果您的 OU 结构发生变化,这将不再起作用!

当然,在您的示例中,您可以提取字符串的城市和名称

'CN=Marley, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com' | %{(($_ -split ',OU',2)[0] -split '=')[1] -replace '\'}

但由于它是一个对象的区分名称,我认为最好在AD中检索该对象以获取该信息

$DN="CN=Marley, Bob,OU=Users,OU=PARIS,DC=Domain,DC=com"
$object = New-Object System.DirectoryServices.DirectoryEntry "LDAP://$DN"
$name=$object.Properties.cn
$city=$object.Properties.l

最新更新