组名称数组上的 Powershell Foreach Get-ADGroupMember 未返回一致的结果

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

我正在尝试获取属于四个组中至少一个组的所有 AD 组成员的列表。 我将这些组放入一个数组中,并在其上运行 foreach 循环,通过管道传输到 Get-ADUser -Filter * 并使用Where-Object 对禁用帐户进行过滤。

它最初返回 11 个结果,尽管这些帐户不是数组中组的成员,然后所有进一步的结果都会抛出错误

Get-ADUser : The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters that take pipeline input.At line:1 char:50
CategoryInfo: InvalidArgument: (REDACTED) [Get-ADUser], ParameterBindingException FullyQualifiedErrorId: InputObjectNotBound,Microsoft.ActiveDirectory.Management.Commands.GetADUser

我曾尝试扩展 Get-ADUser 上的属性,但无济于事。 我尝试直接指定组而不是使用数组和foreach循环,发生了同样的错误。

这些是我运行的命令:

$groups = @('Group1','Group2','Group3','Group4')

foreach ($i in $groups)  {Get-ADGroupMember $i | Get-ADUser -Filter * -Properties * | Where-Object {$_.Enabled -eq $False} | Select CN }

也可以直接指定组,无需数组和foreach循环

Get-ADGroupMember 'Group1' | Get-ADUser -Filter * -Properties * | Where-Object {$_.Enabled -eq $False} | Select CN
powershell active-directory
1个回答
0
投票

您的代码的问题是因为当您尝试同时通过管道传输身份时,您正在使用

-Filter *
,只需从代码中删除该部分即可,它应该可以工作。您还应该为对象类
user
的成员添加一个过滤器,否则当管道身份不是
Get-ADUser
时,
user
会抛出错误。

Get-ADGroupMember 'Group1' |
    Where-Object ObjectClass -EQ user |
    Get-ADUser -Properties * |
    Where-Object Enabled -eq $False |
    Select-Object CN

更有效的方法是在 AD 中查询属于

$groups
中任何组的成员的所有用户,不过代码有点复杂。

$groups = @('Group1', 'Group2', 'Group3', 'Group4')
$ldapFilter = -join @(
    '(|'
    $groups | Get-ADGroup | ForEach-Object { '(memberOf={0})' -f $_.DistinguishedName }
    ')'
)
Get-ADUser -LDAPFilter $ldapFilter -Properties CN | Select-Object CN
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.