检查特定用户的命令是否是某个组的一部分

时间:2018-01-06 07:20:35

标签: powershell active-directory

列出所有拥有邮箱但不在名为Metalogix *的组中的用户。我需要一个PowerShell脚本来检查特定用户是否属于某个组,以及用户是否属于这些组中的任何一个。

我已经有了工作脚本:

Import-Module ActiveDirectory
$Users = Get-Mailbox -ResultSize "unlimited" 
$Group = "Metalogix*"

foreach ($user in $Users) {
    $Check = Get-ADPrincipalGroupMembership -Identity $User.sAMAccountName |
             ? { $_.Name -like $Group }

    if ($Check -eq $null) {
        Write-Output "$User.sAMAccountName is NOT part of this group"
    } else {
        $Results = Get-Mailbox -Identity $User.sAMAccountName |
                   select Name, sAMAccountName, PrimarySmtpAddress, Database |
                   Export-csv "c:\results1.csv" -NTI -Append
    }
}

但是脚本没有递归地列出组,例如tester4-6是' Test Group 2'的成员,它是' Test Group 1'的成员。其余的都是直接的。我只能看到直接会员资格,而不是递归会员资格。

第二个问题:我希望所有用户都使用以" STR"开头的samaccountname前缀。

Test Group 1
tester1
tester2
   ->    Test Group 2
         tester4
         tester6

2 个答案:

答案 0 :(得分:0)

我可能会使用递归函数。像这样:

port 443

答案 1 :(得分:0)

Get-ADPrincipalGroupMembership不是递归的,但Get-ADGroupMember是。

$Users = Get-Mailbox -ResultSize "unlimited"
$Group = 'Metalogix*'
$GroupMembers = Get-ADGroupMember -Identity $Group | Get-ADGroupMember -Recursive | Select-Object -ExpandProperty samAccountName

foreach ($User in $Users) {
    if ($User -in $GroupMembers) {
        Write-Output "User $User is in group $Group."
    }
    else {
        Write-Output "User $User is not in group $Group."
    }
}

这也更有效,因为您只获取一次组成员身份。

我远离我的服务器,所以将上述视为伪代码。