我一直在多个AD域中尝试以下PowerShell脚本,但是在一个2008 R2域中它失败了,我找不到它的原因:
PS D:\> Add-type -AssemblyName System.DirectoryServices.AccountManagement
PS D:\> $ct = [System.DirectoryServices.AccountManagement.ContextType]::Domain
PS D:\> $Domain = $env:USERDOMAIN
PS D:\> $pc = New-Object System.DirectoryServices.AccountManagement.PrincipalContext $ct,$Domain
PS D:\> $user = System.DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($pc, "SamAccountName", "testuser")
PS D:\> $groups = $user.GetAuthorizationGroups()
D:\> $groups
通常,脚本会提供一个组列表,但对于此域,它会给出以下错误消息(在组列表之后):
枚举集合时发生错误:指定的目录服务属性或值不存在。
CategoryInfo:InvalidOperation(System.Director...ment.Principal]:FindResultEnumerator`1) [], Runtime
Exception
FullyQualifiedErrorId : BadEnumeration
这可能与AD权限或权限有关吗?
答案 0 :(得分:1)
我可能会出现以下几个原因:
一些可能的解决方案:
$ErrorActionPreference = "SilentlyContinue"
(非常粗略的代码作为起点)
$searchRoot = New-Object System.DirectoryServices.DirectoryEntry
$adSearcher = New-Object System.DirectoryServices.DirectorySearcher
$adSearcher.SearchRoot = $searchRoot
$adSearcher.Filter = "(samAccountName=UserName)"
$adSearcher.PropertiesToLoad.Add("memberOf")
$samResult = $adSearcher.FindOne()
if($samResult)
{
$adAccount = $samResult.GetDirectoryEntry()
$groupMembership = $adAccount.Properties["memberOf"]
$groupMembership | foreach {
Write-Host $_
}
}