PowerShell - 创建自定义对象以导出为 CSV

PowerShell - Create Custom Object to Export as CSV

我正在尝试使用 PowerShell 提取报告并将其导出为 CSV。我想抓取一个广告组,获取“成员”和“成员”,然后将其导出。

最终导出,我希望它看起来像这样:

Group Name        Member Of      Member ID    Member Name      Member Email
Finance Group     AD Group 1     User 1       John Smith       JSmith@example.com
Finance Group     AD Group 2     User 2       Ryan Smith       RSmith@example.com             
Finance Group     AD Group 3     User 3       Amanda Smith     ASmith@example.com           
Finance Group     AD Group 4      
Finance Group     AD Group 5      

我有以下脚本来获取 AD 组成员和成员:

$Groups = "Finance Group"

$Object = New-Object PSObject

ForEach ($Group in $Groups) {
    
    $MemberOf = Get-ADPrincipalGroupMembership -Identity $Group

    ForEach ($Access in $MemberOf.Name) {
        $Object | Add-Member -NotePropertyName "Group Name" -NotePropertyValue $Group
        $Object | Add-Member -NotePropertyName "Member Of" -NotePropertyValue "$MemberOf
    }
}

我只是想创建前 2 列,但是,Add-Member 似乎只是替换当前值,我似乎找不到附加值的方法。之后我会尝试在用户信息栏中添加。我想要重复“Group Name”的原因是因为我想使用 Pivot Table 将“Finance Group”分组到其各自的“Member Of”和“Members”。我这样做是正确的方法还是有更好的方法来做到这一点?

提前致谢。

如果我没记错的话,这就是你的意图:

$Groups = "Finance Group"

foreach ($Group in $Groups)
{
    $groupObj = Get-ADGroup -Identity $Group -Properties Members, MemberOf
    for ($i = 0; $i -lt [Math]::Max($groupObj.Members, $groupObj.MemberOf; $i++)
    {
        [PSCustomObject]@{
            GroupName = $Group
            MemberOf  = $groupObj[$i].MemberOf
            Members   = $groupObj[$i].Members # here you can substitute this field, or add new ones, with a new Get-ADUser call - 
                                              # to get the display name or other properties.
        }
    }
}

。 . .如 在线 评论中所述,您可以使用 Get-ADUser 替换返回的字段来调用 AD,以换成显示名称或其他字段。

不幸的是,我的计算机上没有安装 AD,也无法再访问 AD 环境,所以这一切都是基于我认为正确的。我相信 Get-ADGroup returns 也是 属性 的成员;所以在这方面只需要一个电话。

以下 只需稍作修改即可获取用户的 DisplayNameMail 属性:

$Groups = "Finance Group"

$export = foreach ($Group in $Groups)
{
    $thisGroup = Get-ADGroup $Group -Properties MemberOf
    $memberOf = $thisGroup.MemberOf
    $member = @(Get-ADGroupMember $group).where({
        $_.objectClass -eq 'user'
    }) | Get-ADuser -Properties DisplayName, mail

    $max = [Math]::Max($memberOf.Count, $member.Count)
    
    for ($i = 0; $i -lt $max; $i++)
    {
        [PSCustomObject]@{
            GroupName   = $thisGroup.Name
            MemberOf    = $memberOf[$i] -replace '^CN=(.*?)(?<!\),.*',''
            MemberID    = $member[$i].Name
            MemberName  = $member[$i].DisplayName
            MemberEmail = $member[$i].mail
        }
    }
}

$export | Export-Csv .... -NoTypeInformation

MemberOf上使用-replace是因为AD组的MemberOf属性是DistinguishedName,这将得到他们的 CN(通用名称)。有关详细信息,请参阅 https://regex101.com/r/jrbwVb/1