【问题标题】:Get Display name for group users for multiple groups, from a filtered list of groups从过滤的组列表中获取多个组的组用户的显示名称
【发布时间】:2017-07-24 19:07:25
【问题描述】:

请耐心回答我在任何在线论坛上的第一个问题。 =]

我的意图是使用 PowerShell 创建包含以下信息的 csv:

  • 组名(仅打印名称与文本字符串“O365”匹配的组)*
  • 哪些用户是该组的成员。
  • 每个成员的用户电子邮件是什么

目前,我的脚本如下。

    Get-ADGroup -filter {name -like "O365*"} -properties GroupCategory | 
    Select-Object -ExpandProperty name | 
    get-adgroupmember | 
    where {$_.objectclass -eq 'user'} |
    Get-ADUSer -properties Displayname,Description,Mail |
    Select Name,Displayname,Mail

这个结果为我提供了:

  • 1 列显示名称
  • 1 列用于邮件

在研究了一段时间后,我感觉好像一次又一次地错过了答案。大多数人似乎都满足于在不过滤 ADGroup cmdlet 的情况下执行类似的任务,但这对我来说需要很长时间。

作为新手,我很高兴收到愿意花时间回答的人的来信。 谢谢。

【问题讨论】:

    标签: powershell active-directory


    【解决方案1】:

    因此,您希望用户是名称与“O365*”匹配的组的成员,并且他们需要显示为

    Group.Name | User.DisplayName | User.Mail
    

    只要看一下问题,就会认为下面的代码可以解决问题,但它可以工作,但有一个问题......

    cls
    $ErrorActionPreference = "stop"
    #$VerbosePreference = "Continue"
    #$DebugPreference = "Continue"
    
    Write-Verbose "Retrieving the ADGroups"
    $Groups = Get-ADGroup -filter {name -like "O365*"}  
    Write-Debug  ($Groups | Select Name | Format-Table | Out-String)
    
    $UserList = @()   
    
    Foreach ($Group in $Groups) {
        Write-Verbose "Processing Group $Group"
        $GroupMembers = $Group | Get-ADGroupMember
        Write-Debug  "GroupMembers:  $($GroupMembers | Select Name | Format-Table | Out-String)"
    
        Foreach ($GroupMember in $GroupMembers) {
            Write-Verbose "Processing GroupMember $GroupMember"
            Write-Debug  "GroupMember $($GroupMember | Out-String)"
    
            if (!($GroupMember.objectClass -eq "user")) {
    
                Write-Warning "GroupMember $($GroupMember) is not of type 'User', Skipping"
                Continue
    
            }
    
            else {
    
                Try {
                    $UserList += ($GroupMember | Get-ADUSer -properties Mail | Select @{N="Group"; E={$Group.Name}}, Name, Mail)
                    Write-Verbose "user $GroupMember has been added to the list."
                }
    
                Catch {
                    Write-Warning "An error ocurd while adding user $GroupMember to the list."
                    Continue
                }
    
            }
        }
    }
    
    $UserList
    

    如果 o365 组包含其他组,则不会包括这些子组的成员。

    输出示例

    WARNING: GroupMember CN=subgroup,OU=Custom,DC=DOMAIN,DC=TLD is not of type 'User', Skipping
    
    Group                                       Name                                       Mail                                      
    -----                                       ----                                       ----                                      
    o365-SubscriptionA                          User U. UserLand                           User@Domain.tld                           
    o365-SubscriptionA                          User2 U2. UserLand                         User2@Domain.tld                          
    o365-SubscriptionB                          User U. UserLand                           User@Domain.tld   
    

    【讨论】:

    • 感谢您的回复。你对我的询问是正确的。我确信这些组“O365*”只包含个人用户,其中没有组。我会试试这里有什么,看看我是否能得到想要的结果。再次感谢。
    • @DrewStevens 代码更新,我什至添加了一些额外的东西,它仍然需要更多的爱,但那是给你的。
    • 哇!你摇滚!非常感谢你。我期待着学习更多。感谢您的初次体验。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2017-04-22
    • 2021-06-30
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    相关资源
    最近更新 更多