豆子今天遇见个小问题,发现某个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美元 ,,,,,,,,,,,,, ,,,,,,,,,,,,,,,} ,,,,,,,,,,,} ,,,,,,, ,,,,,,,} ,,,} ,才能结束 ,,,{ ,,,} }
简单测试一下我的函数,结果如下:普通用户(×××),绑定了邮件的组(蓝)色,没有绑定邮件的组(红色)
成功。