PowerShell递归查询组成员

  

豆子今天遇见个小问题,发现某个Office365的邮件组的成员组里面居然没有配置邮件,这样导致个别用户没有收到邮件。为了避免这个情况再次发生,需要对所有的邮件组都做个检查。问题在于邮件组可能嵌套了多个组,如果人工去看实在太累,写了个小脚本扫一下。


因为是嵌套的组,于是很自然的想到了递归。指定一个邮件组,去扫一下成员,看看该成员是否配置了邮箱地址,如果这个成员刚好又是一个组,那么调用自己,重复上述步骤


function 获取成员   {   ,,,(CmdletBinding ())   ,,,(别名())   ,,,(OutputType (int [])]   ,,参数   ,,,(   ,,,,,,,#,Param1  help 描述   ,,,,,,,(参数(强制性=$真的,   ,,,,,,,,,,,,,,,,,,ValueFromPipelineByPropertyName=$真的,   ,,,,,,,,,,,,,,,,,,ValueFromPipeline=$真的,   ,,,,,,,,,,,,,,,,,,位置=0))   ,,,,,,,(字符串)   ,,,,,,,美元的名字   ,,,)   ,才能开始   ,,,{   ,,,}   ,,,的过程   ,,,{   ,,,,,,,一个美元=Get-DistributionGroupMember  name 美元;-ErrorAction  SilentlyContinue   ,,,,,,,如果(a 美元;-eq 零美元){   ,,,,,,,,,,,return    ,,,,,,,}   ,,,,,,,foreach (b 美元;拷贝一个美元){   ,,,,,,,,,,,if  (b.Recipienttype 美元;情商'Usermailbox”),或是;(b.Recipienttype 美元;-eq “MailContact”),或是;(b.Recipienttype 美元;-eq “用户”)){   ,,,,,,,,,,,,,,,write-host  b.name 美元;-ForegroundColor  DarkYellow   ,,,,,,,,,,,}   ,,,,,,,,,,,其他的{   ,,,,,,,,,,,,,,,如果(b.primarysmtpaddress 美元;-eq  " ") {   ,,,,,,,,,,,,,,,,,,,write-host  b.name 美元;-ForegroundColor 红色   ,,,,,,,,,,,,,,,,,,   ,,,,,,,,,,,,,,,}   ,,,,,,,,,,,,,,,其他的{   ,,,,,,,,,,,,,,,,,,,write-host  b.name 美元;-ForegroundColor 青色   ,,,,,,,,,,,,,,,,,,,get-member  b.name美元   ,,,,,,,,,,,,,   ,,,,,,,,,,,,,,,}   ,,,,,,,,,,,}   ,,,,,,,   ,,,,,,,}   ,,,}   ,才能结束   ,,,{   ,,,}   }


简单测试一下我的函数,结果如下:普通用户(×××),绑定了邮件的组(蓝)色,没有绑定邮件的组(红色)

 PowerShell递归查询组成员


成功。

PowerShell递归查询组成员