如何比较用户组

问题描述 投票:0回答:1

我正在尝试查询某个域中特定组中某个 OU 中的所有用户,而不是另一个特定组中的所有用户。

首先,我在 Active Directory 中查询所有三组用户:OU、要包含的组和要排除的组。要排除的组恰好是一个通讯组,因此我必须以不同的方式查询它。

$OU = Get-ADUser -Filter * -SearchBase "OU=Developers,OU=Everyone,DC=Organization,DC=com" -Properties MemberOf
$include = Get-ADGroupMember -Identity "this group"
$exclude = Get-ADObject -Filter 'Name -eq "that group"' -Properties member | Select-Object -ExpandProperty member | ForEach-Object { Get-ADUser -Identity $_ }

我测试了每个变量的命令,它们都可以独立工作。肯定是比较它们的逻辑不好,或者输出差异太大而无法比较。

我尝试将它们与

foreach
循环进行比较。

foreach ($user in $OU) {
    if (($include -contains $user.DistinguishedName) -and (-not $exclude -contains $user.DistinguishedName)) {
        Write-Host $user.SAMAccountName
    }
}

..并通过管道将它们穿过

Where-Object

$filteredUsers = $OU | Where-Object {
    ($include -contains $_.DistinguishedName) -and
    -not ($exclude -contains $_.DistinguishedName)
}

但是这些语句都没有返回输出。我做错了什么?是我的逻辑有问题,还是我比较了错误的值?

powershell active-directory
1个回答
0
投票

如果您使用 LDAP 来获取用户而不是过滤客户端,会更容易、更高效:

$groupToInclude = (Get-ADGroup groupToInclude).DistinguishedName
$groupToExclude = (Get-ADGroup groupToExclude).DistinguishedName
$getADUserSplat = @{
    LDAPFilter = "(&(memberOf=$groupToInclude)(!memberOf=$groupToExclude))"
    SearchBase = 'OU=Developers,OU=Everyone,DC=Organization,DC=com'
}
Get-ADUser @getADUserSplat
© www.soinside.com 2019 - 2024. All rights reserved.