Associators
쿼리 (example)로이 작업을 수행 할 수 있습니다. 악명 높게 느리지 만 효과가 있습니다.
$u = Get-WmiObject -Class Win32_UserAccount -Filter "Name='user'"
$group = Get-WmiObject -Class Win32_Group -Filter "Name='group'" | Select-Object -ExpandProperty Caption
$u | foreach {
$query = “Associators Of {Win32_UserAccount.Domain='” `
+ $_.Domain + “',Name='” + $_.Name `
+ “'} WHERE AssocClass=Win32_GroupUser”
$memberOf = Get-WmiObject -Query $query |
select -ExpandProperty Caption
If($memberOf -contains $group){
Write-Host "$($_.Name) is a member of $group"
} Else {
Write-Host "$($_.Name) is not a member of $group"
}
}
귀하가 찾고있는 그룹을 찾고 그룹을 구성하여 사용자가 회원인지 확인하십시오. u$
은 단 한 명의 사용자 여야하지만 여전히 한 명의 회원으로 구성된 모음입니다. 그것을 ForEach-Object
으로 파이프하고 Associators
쿼리를 작성하십시오. 쿼리를 실행하고 모든 그룹 캡션 (domain \ groupname)을 반환하십시오. $memberof
은 배열이므로 -contains
을 사용하면 찾고있는 그룹이 있는지 확인할 수 있습니다.
는 또한
당신은 당신이 그들에 액세스 할 수있는 경우는 AD cmdlet을 사용하여 다음과 같은
(Get-ADUser $user -Properties memberof | Select-Object -ExpandProperty memberof) -contains (Get-ADGroup -Identity $group)
은 위의 True
또는 False
를 반환합니다 실행할 수 있습니다. 당신은
OpenLDAP를 내가 수집 것과이를 지원해야 import-module activedirectory
계속 테스트를 사용하여 광고 cmdlet을 설치하고 훨씬 빠르게 이전 WMI 다음입니다.
$search = [adsisearcher]"(&(objectcategory=user)(Name=userFullName))"
$userLDAP = $search.FindOne().Path
$userMembers = ([ADSI]$userLDAP).memberof
$search = [adsisearcher]"(&(objectcategory=group)(Name=groupname))"
$group = ($search.FindOne().Path) -replace "LDAP://"
$userMembers -contains $group
죄송합니다. 테스트를 위해 OpenLDAP에 액세스 할 수 없으므로 죄송합니다. 사용자를 검색하고 MemberOf를 $userMembers
으로 가져옵니다. 그런 다음 그룹을 $group
으로 가져옵니다. 문자열에서 LDAP 접두사를 제거해야했습니다. 그런 다음 또 다른 -Contains
을 다시하십시오.
'activedirectory' 모듈에 접근 할 수 있습니까? 'Get-Aduser -memberof'를 사용하여이 정보를 얻을 수 있습니다. – Matt
광고 모듈에 액세스 할 수 없다고 생각합니다. –
내 대답은 당신을 도울 수 있습니다. – Matt