我正在编写一个脚本,该脚本收集用户所属的所有组的列表(数组)。使用DN显示值。我如何解析输出,所以我只得到组名(CN)?
DN = CN =组名,OU = Dept,OU =公司,DC =域,DC =本地
我只需要“群组名称”部分,因为这会通过电子邮件发送给管理员。
$user.memberof
谢谢!
答案 0 :(得分:3)
我用这个:
$DN = 'CN=Group Name,OU=Dept,OU=Company,DC=Domain,DC=Local'
$CN = $DN -replace '^CN=(.+?),(?:OU|CN)=.+','$1'
$CN
Group Name
我见过依赖于分裂逗号的解决方案,但是CN可以包含嵌入式逗号(它们必须使用反斜杠转义,但它们可以在那里)。
答案 1 :(得分:0)
我建议使用Pathname COM对象来解析可分辨名称字符串。从PowerShell使用很尴尬,所以我为它编写了一个脚本包装器(http://windowsitpro.com/powershell/powershell-active-directory-paths)。在你的情况下,你可以这样写:
$dn = "CN=Group Name,OU=Dept,OU=Company,DC=domain,DC=local"
$nameOnly = Get-ADPathname.ps1 $dn -GetElement 0 -ValuesOnly
# $nameOnly variable contains "Group Name"
Pathname对象实际上是处理AD路径的最佳方式,因为它可以正确处理转义。
答案 2 :(得分:0)
您可以使用正则表达式拆分distinguishedName
属性的值,以确保符合转义的逗号。
('CN=Group\,Name,OU=asdf' -split '(?<!\\),')[0];
# Result:
# CN=Group\,Name