1

我正在尝试列出 Active Directory 域中每个用户的成员资格列表。我创建了以下行:

foreach($_ in $(Get-ADUser -Filter *).Name){            
        Get-ADPrincipalGroupMembership -Identity $_ | select Name,Groupscope,Groupcategory| sort Name
}

问题是当用户没有任何组成员身份时,运行这行代码会导致出现以下错误。

Get-ADPrincipalGroupMembership : Cannot find an object with identity: 'TEST USER' 
under: 'DC=contoso,DC=com'.

添加-Erroraction Silentlycontinue后面Get-ADPrinicpalGroupMembership并不能缓解问题。我宁愿不要乱来$ErrorAction。但是,在生产线完成后更改$ErrorAction"silentlycontinue"和更改回来确实有效。虽然不是一个很好的解决方案。有什么方法可以防止错误显示吗?

noam 解决方案的输出:(仅显示可用组的完整列表,而不是用户的成员资格)

name                                       groupScope             groupCategory
----                                       ----------             -------------
Administrators                            DomainLocal                  Security
Distributed COM Users                     DomainLocal                  Security
Domain Admins                                  Global                  Security
Domain Users                                   Global                  Security
Enterprise Admins                           Universal                  Security
Group Policy Creator Ow...                     Global                  Security
HelpLibraryUpdaters                       DomainLocal                  Security
Schema Admins                               Universal                  Security
TESTGROUP1                                     Global                  Security
Domain Guests                                  Global                  Security
Guests                                    DomainLocal                  Security
Denied RODC Password Re...                DomainLocal                  Security
Domain Users                                   Global                  Security
4

2 回答 2

0

我不确定这些 cmdlet 的行为,但您看到的错误可能是由于仅使用 Name 属性值来识别对象而不是它的 DN 或其他唯一标识符(Get-ADPrincipalGroupMembership 文档。尝试管道输出Get-ADUser 到 Get-ADPrincipalGroupMembership 以查看问题是否仍然存在(参见下面的示例)。此外,您可能希望将 Get-ADUser 的内容通过管道传输到下一个 cmdlet,这样您就不必存储 Get 返回的信息-ADUser 在处理之前在内存中。

Get-ADUser -Filter * | Get-ADPrincipalGroupMembership

如果问题仍然存在:

您可以使用 try/catch 块:

Get-ADUser -Filter * | %{ `
 try
 {
  Get-ADPrincipalGroupMembership $_
 }
 catch [Microsoft.ActiveDirectory.Management.ADIdentityResolutionException]
 {
  #Log
  Write-Host "not found"
 }
}
于 2013-09-30T20:04:41.300 回答
0

您可以检索 MemberOf 属性并仅在该属性不为空时运行 Get-ADPrincipalGroupMembership。

$all = Get-ADUser -filter * -property memberOf
foreach ($usr in $all) {
    if ($usr.MemberOf) {
      $groups = $usr | Get-ADPrincipalGroupMembership | select name, groupScope, groupCategory
      $usr.name + " belongs to the following groups:`n"
      $groups | sort name | ft -auto
    } else {$usr.name + " does not belong to any groups.`n"}
} #close foreach

自定义对象也可用于此类报告。

Get-Member对于探索对象属性很有用。

Get-ADUser joeUser -Property * | gm | where {$_.memberType -eq "Property"}
于 2013-10-01T15:07:48.173 回答