2017-07-24 71 views
1

在任何在线论坛上都有我的第一个问题。 =]从群组的筛选列表中获取多个群组的用户的显示名称

我的意图是利用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的情况下执行此类相似的任务,但这对我来说太长了。

作为一个新手,我很高兴听到任何人会花时间回答。 谢谢。

回答

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       [email protected]       
o365-SubscriptionA       User2 U2. UserLand       [email protected]       
o365-SubscriptionB       User U. UserLand       [email protected] 
+0

感谢您的回复。我的询问对你来说是正确的。 我确定这些群组“O365 *”只包含个人用户,并且他们中没有群组。 我会尝试一下这里,看看我能否获得所需的结果。 再次感谢。 –

+0

@DrewStevens代码更新,我甚至增加了一些额外的东西,它仍然需要一些更多的爱,但这是给你的。 – SteloNLD

+0

哇!你摇滚!非常感谢你。我期待着更多的学习。感谢您的第一次体验。 –