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