Powershell - 解析输出

时间:2014-05-20 19:02:39

标签: powershell

我正在编写一个脚本,该脚本收集用户所属的所有组的列表(数组)。使用DN显示值。我如何解析输出,所以我只得到组名(CN)?

DN = CN =组名,OU = Dept,OU =公司,DC =域,DC =本地

我只需要“群组名称”部分,因为这会通过电子邮件发送给管理员。

$user.memberof

谢谢!

3 个答案:

答案 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