Powershell-解析输出

Powershell-解析输出,powershell,Powershell,我正在编写一个脚本,它收集用户所属的所有组的列表(数组)。这些值使用DN表示。如何解析输出以便只获取组名(CN) DN=CN=Group Name,OU=Dept,OU=Company,DC=Domain,DC=Local 我只需要“组名”部分,因为这将通过电子邮件发送给经理 $user.memberof 谢谢大家! 我建议使用Pathname COM对象来解析可分辨名称字符串。从PowerShell中使用它很尴尬,所以我为它编写了一个脚本包装器()。在您的情况下,您可以这样写: $dn =

我正在编写一个脚本,它收集用户所属的所有组的列表(数组)。这些值使用DN表示。如何解析输出以便只获取组名(CN)

DN=CN=Group Name,OU=Dept,OU=Company,DC=Domain,DC=Local

我只需要“组名”部分,因为这将通过电子邮件发送给经理

$user.memberof

谢谢大家!

我建议使用Pathname COM对象来解析可分辨名称字符串。从PowerShell中使用它很尴尬,所以我为它编写了一个脚本包装器()。在您的情况下,您可以这样写:

$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路径的最佳方法,因为它可以正确地处理转义。

我使用以下方法:

$DN = 'CN=Group Name,OU=Dept,OU=Company,DC=Domain,DC=Local'
$CN = $DN -replace '^CN=(.+?),(?:OU|CN)=.+','$1'
$CN

Group Name

我见过依赖于逗号拆分的解决方案,但CNs可以包含嵌入的逗号(它们必须用反斜杠转义,但可以在其中)。

您可以使用正则表达式拆分
DiscrimizedName
属性的值,以确保使用转义的逗号

 ('CN=Group\,Name,OU=asdf' -split '(?<!\\),')[0];
 # Result:
 # CN=Group\,Name
('CN=Group\,Name,OU=asdf'-split'(?