PowerShell 递归查询组成员

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

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

function get-member
{
    [CmdletBinding()]
    [Alias()]
    [OutputType([int])]
    Param
    (
        # Param1 help description
        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   ValueFromPipeline=$true,
                   Position=0)]
        [string]
        $name
    )
    Begin
    {
    }
    Process
    {
        $a=Get-DistributionGroupMember $name -ErrorAction SilentlyContinue
        if($a -eq $null){
            return 
        }
        foreach($b in $a){
            if (($b.Recipienttype -eq‘Usermailbox‘) -or ($b.Recipienttype -eq ‘MailContact‘) -or ($b.Recipienttype -eq ‘User‘)){
                write-host $b.name -ForegroundColor DarkYellow
            }
            else{
                if($b.primarysmtpaddress -eq ""){
                    write-host $b.name -ForegroundColor red
                   
                }
                else{
                    write-host $b.name -ForegroundColor Cyan
                    get-member $b.name
              
                }
            }
        
        }
    }
    End
    {
    }
}

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

成功。

时间: 2024-11-08 09:33:00

PowerShell 递归查询组成员的相关文章

Powershell查看AD 组成员的变化

论坛上看见有人问如何用powershell查看管理员组的变化,豆子写了个很简单的脚本实现这个功能,写的非常简单,就是一个思路验证了一下而已. 首先获取一下当前的组成员信息吧,Powershell 3.0以后可以直接使用AD module里面的很多命令,一个比较好使的命令是 Get-ADReplicationAttributeMetadata,可以获取对象相关的metadata 信息.比如下面我可以获取testgroup1里面每个成员创建的时间状态.  $dn=(get-adgroup "test

Powershell批量移除AD组成员

如何批量将AD组中成员移除呢?下面我们借用一个变量. #获取AD组成员 $Users = Get-ADGroupMember GroupName #删除AD组内成员 Remove-AdGroupMember GroupName –Members $Users 举例如下, 谢谢!

Powershell 获取本地组成员信息

工作当中需要查看本地组成员信息,从网上看到使用net localgroup 命令可以实现本地组成员信息,经过再加工得到如下信息,备忘至此! $localgroups = "Administrators","Remote Desktop Users" $result = @()foreach($group in $localgroups){$groupmembers = net localgroup $groupforeach($member in $groupmem

查询邮件组成员命令Get-ADGroupMember实例

我查询的是静态邮件组成员,有一个需求就是这个组里人员变动比较大,需要整一下,这个组本来就是大组套小组的.我查了一下微软的文档.然后构造了一个命令,就能查询出来了. 如下所示: 官方的命令参考如下链接.https://docs.microsoft.com/en-us/powershell/module/addsadministration/get-adgroupmember?view=win10-ps 但实这个命令举例中不是我这样式的.因为更多的是需要一个名单,而不是那些子的对象. 原文地址:ht

Exchange2013/2016 DAG高可用性组成员服务器灾难恢复

我们前面介绍了很多关于Exchange相关配置介绍及灾难恢复的相关介绍,但是对于企业来说,环境内为了提高服务的稳定性,肯定会部署多台Exchange服务器,如果环境有服务出现灾难性我们如果恢复呢,所以呢,我们就在此次文章中介绍,Exchange2013 DAG可用性组成员服务器的灾难恢复介绍:作为数据库可用性组 (DAG) 成员的邮箱服务器丢失,或发生故障且无法恢复并需要进行替换时,可执行服务器恢复操作.Microsoft Exchange Server 2013 安装程序包含可用于执行服务器恢

Oracle在线调整redo日志组数及组成员

Oracle在线调整redo日志组数及组成员 一.调整redo日志组大小 操作原因: redo日志一般设置让日志转换时间为10-20分钟,转换太频繁会影响性能.通常情况下每小时不要超过6次!如果AWR(Automated Workload Repository 自动负载信息库) report中log file switch checkpoint incomplete) 比较大,说明redo log之间的切换过于频繁.可以通过增加redo log size来降低切换的频率.但如果redo log

重做日志文件组和重做日志文件组成员的管理

一.重做日志文件组: 1.添加重做日志组的指令: alter database [数据库名称] add logfile[group 正整数] 文件名称 [,[group 正整数]文件名称]] 不是有group选项时oracle系统会自动在当前最大的组号上加1来产生新的组号 ex:alter database add logfile ('D:\REDO04.LOG','D:\REDO05.LOG') size 15m; 增加新的重做日志组并且添加两个重做日志成员,大小设置为15M 2.删除重做日志

恢复数据库可用性组成员服务器

简单看了下technet恢复数据库可用性组成员服务器,ex2013跟ex2010过程是一致的.可参考如下: http://blog.sina.com.cn/s/blog_6ecd398f0100mrwf.html 环境:2台mailbox 服务器构成的DAG,其中一台down机,恢复方法如下.我测试环境如下:一台DC(winosr201),同时做DAG仲裁,                          IP:172.16.1.1一台Exchange3角色(winosr202)(在实验环境快

修改redo_logfile组成员和大小

[email protected]>select GROUP#  ,BYTES/1024/1024 size_M,STATUS,ARCHIVED from v$log; GROUP#    SIZE_M STATUS          ARC                                       ---------- ---------- ---------------- ---