我正在尝试查询某个域中某个 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)
}
但这两个语句均未返回输出。我做错了什么?是我的逻辑有缺陷,还是我比较了错误的值?