从Active Directory读取用户的组时,“ GetAuthorizationGroups”引发异常

时间:2019-05-14 17:16:17

标签: powershell active-directory

我正在尝试通过GetAuthorizationGroups查找组,这是可以使IEnumerable返回的一种工作方式,但是当我尝试读取它们时,返回的大多数项目都会引发异常:< / p>

System.Runtime.InteropServices.COMException:
The specified directory service attribute or value does not exist.

如果插入自己的域,容器和用户名,则应获得其组的列表:

Powershell:

[System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices.AccountManagement")
[System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices")
[System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices.ActiveDirectory")

$username = "a-user-such-as-yourself"

$principalContext = new-object -TypeName System.DirectoryServices.AccountManagement.PrincipalContext "Domain", "yourADdomain.com", "OU=whatever,OU=andever,DC=yourADdomain,DC=com"

$principal = [System.DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($principalContext, $username)

$groups = $principal.GetAuthorizationGroups()
Write-Output $groups

如果我忽略所有例外,它将成功返回“每个人”,“经过身份验证的用户”以及更多的组,但会引发其他异常。

如果我以Domain Admin身份运行,则可以正常工作,返回所有组,没有任何例外。

因此,我假设运行此命令的用户需要Active Directory中的某种权限。但是哪个?

1 个答案:

答案 0 :(得分:6)

我们的优秀sysadmin通过恢复一些出于复杂原因而在我们的广告中缺少的默认权限来使此工作正常进行。我们缺少对Active Directory中标准lineRead.Split(" ", StringSplitOptions.RemoveEmptyEntries);容器上的lineRead.Split(" ", StringSplitOptions.RemoveEmptyEntries).Select(e => CLASS[r,c] = e);的读取权限。