首页 > 解决方案 > 获取具有其他用户对象属性的所有用户组

问题描述

我是 powershell 新手,想了解如何获取属于用户的组以及以下格式的其他用户对象属性(为每个组重复用户和电子邮件):

username user_email        user_groups
user1   user1@domain.com   group1
user1   user1@domain.com   group2
user1   user1@domain.com   group3
user2   user2@domain.com   group1
user2   user2@domain.com   group2
...

我知道这会获取用户组,但不确定如何包含其他用户对象并以上述格式重复:

Get-ADPrincipalGroupMembership username | select name

标签: powershell

解决方案


您需要获取 ADUser 对象、扩展其 memberof 属性、遍历这些对象并获取每个对象的广告组。

$username = "PowerShellGuy"
$adUserObj = Get-ADUser -Filter "SamAccountName -eq '$username'" -properties memberof
$groups = $adUserObj.MemberOf | Get-ADgroup

你可以像这样单行

Get-ADUser -Filter "SamAccountName -eq 'PowerShellGuy'" -properties memberof | % memberof | Get-ADgroup

如果您想要自定义格式,您可以构建自定义 psobject 或自定义类。我更喜欢类方法

Class CustomAdInfo 
{
    $UserName
    $Email
    $Group
}

如果你想要一个组,那么你可以做这样的事情

Class CustomAdInfo 
{
    $UserName
    $Email
    $Group
}

$listOfUsers = @("foo","bar")

$customObjects = 
    foreach($user in $listOfUsers)
    {
        $adUserObj = Get-ADUser -Filter "SamAccountName -eq '$user'" -properties memberof, emailaddress
        $groups = $adUserObj.MemberOf | Get-ADgroup
        foreach($group in $groups)
        {
            New-Object -TypeName CustomAdInfo -Property @{
                UserName = $adUserObj.SamAccountName
                Email = $adUserObj.EmailAddress
                Group = $group
            }
        }
    }

推荐阅读