使用Powershell从AD组获取嵌套CN值

使用Powershell从AD组获取嵌套CN值,powershell,active-directory,Powershell,Active Directory,我一直试图从广告组的属性管理的中获取CN值,这就是我获取组的代码 Get-ADGroup CACAL-ER-Marketing -Properties SamAccountName, managedBy, Name, Description, GroupCategory | Select-Object SamAccountName, managedBy, Name, Description, GroupCategory 哪些输出: SamAccountName : CACAL-ER-Marke

我一直试图从广告组的
属性管理的
中获取
CN
值,这就是我获取组的代码

Get-ADGroup CACAL-ER-Marketing -Properties SamAccountName, managedBy, Name, Description, GroupCategory |
Select-Object SamAccountName, managedBy, Name, Description, GroupCategory
哪些输出:

SamAccountName : CACAL-ER-Marketing
managedBy      : CN=Diane Dela Torre,OU=1-Mail Archive Needed,OU=User Archive,DC=hrbl,DC=net
Name           : CACAL-ER-Marketing
Description    : 
GroupCategory  : Security
我想要得到的是'Diane Dela Torre'值,我尝试将
mananagedBy
转换为Json,但它输出的结果是它不是cmdlet,类似于

Get-ADGroup CACAL-ER-Marketing -Properties SamAccountName, managedBy, Name, Description, GroupCategory |
Select-Object SamAccountName, (managedBy | ConvertTo-Json).CN, Name, Description, GroupCategory

managedBy : The term 'managedBy' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:2 char:32
+ Select-Object SamAccountName, (managedBy | ConvertTo-Json).CN, Name,  ...
+                                ~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (managedBy:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

这应该会达到你想要的结果

Get-ADGroup CACAL-ER-Marketing -Properties SamAccountName, managedBy, Name, Description, GroupCategory |
    Select-Object SamAccountName, @{n="ManagedBy";e={$($_.Managedby -split ('=|,'))[1]}}, Name, Description, GroupCategory
使用
-Split
操作符,我们同时对
=
进行拆分,并获取第二个元素

为了使代码更可读、更易于维护,我建议在调用之前准备属性。在这种情况下没有用处,但我强烈建议使用飞溅

$adprops = @'
SamAccountName
managedBy
Name
Description
GroupCategory
'@ -split [Environment]::NewLine

$selprops = @(
    "SamAccountName",
    @{n="ManagedBy";e={$($_.Managedby -split ('=|,'))[1]}},
    "Name",
    "Description",
    "GroupCategory"
)

Get-ADGroup CACAL-ER-Marketing -Properties $adprops | Select-Object $selprops
编辑,如果您想使用regex,只需使用所需的模式创建regex对象即可

$regex = [regex]'(?<=={1}).+?(?=,)'

Get-ADGroup CACAL-ER-Marketing -Properties SamAccountName, managedBy, Name, Description, GroupCategory |
    Select-Object SamAccountName, @{n="ManagedBy";e={$regex.Match($_.managedby).value}}, Name, Description, GroupCategory

$regex=[regex]”(?这应该可以达到您想要的结果

Get-ADGroup CACAL-ER-Marketing -Properties SamAccountName, managedBy, Name, Description, GroupCategory |
    Select-Object SamAccountName, @{n="ManagedBy";e={$($_.Managedby -split ('=|,'))[1]}}, Name, Description, GroupCategory
使用
-Split
操作符,我们同时对
=
进行拆分,并获取第二个元素

为了使代码更具可读性和更易于维护,我建议在调用之前准备属性。在这种情况下不太有用,但我强烈建议使用Splating

$adprops = @'
SamAccountName
managedBy
Name
Description
GroupCategory
'@ -split [Environment]::NewLine

$selprops = @(
    "SamAccountName",
    @{n="ManagedBy";e={$($_.Managedby -split ('=|,'))[1]}},
    "Name",
    "Description",
    "GroupCategory"
)

Get-ADGroup CACAL-ER-Marketing -Properties $adprops | Select-Object $selprops
编辑,如果您想使用regex,只需使用所需的模式创建regex对象即可

$regex = [regex]'(?<=={1}).+?(?=,)'

Get-ADGroup CACAL-ER-Marketing -Properties SamAccountName, managedBy, Name, Description, GroupCategory |
    Select-Object SamAccountName, @{n="ManagedBy";e={$regex.Match($_.managedby).value}}, Name, Description, GroupCategory

$regex=[regex]”(?可能是使用regex替代上一个答案的替代方法(我不确定可分辨名称是否可能包含逗号,你看)(未经测试,但根据上一个答案改编):


也许可以使用正则表达式替代上一个答案(我不确定可分辨名称是否可能包含逗号,你看)(未经测试,但根据上一个答案改编):


由于
managedBy
属性是用户的
discriminatedname
,因此我将使用get-ADUser来获取此用户的显示名,而不是使用regex

Get-ADGroup CACAL-ER-Marketing -Properties SamAccountName, managedBy, Name, Description, GroupCategory |
Select-Object SamAccountName, 
              @{Name = 'ManagedBy'; Expression = { (Get-ADUser -Identity $_.managedBy -Properties DisplayName).DisplayName }},
              Name, Description, GroupCategory 

由于
managedBy
属性是用户的
discriminatedname
,因此我将使用get-ADUser来获取此用户的显示名,而不是使用regex

Get-ADGroup CACAL-ER-Marketing -Properties SamAccountName, managedBy, Name, Description, GroupCategory |
Select-Object SamAccountName, 
              @{Name = 'ManagedBy'; Expression = { (Get-ADUser -Identity $_.managedBy -Properties DisplayName).DisplayName }},
              Name, Description, GroupCategory