특정 OU의 멤버가 포함 된 모든 그룹의 목록을 만들려고합니다. 이렇게하려면 모든 그룹 이름 목록이있는 파일을 읽고 get-ADGroupMember $ groupName을 사용하여 각 그룹의 구성원을 찾습니다. 각 멤버의 값을 문자열로 변환하고 $ member.indexOf ("특정 OU")와 비교합니다. 문제는 $ member [$ i] .indexOf ("특정 OU")를 얻는 방법을 찾지 못했기 때문입니다. 내 코드는 아래와 같습니다.Powershell에서 Active Directory 그룹 구성원을 반복하는 방법
EDIT : for-each 루프를 사용하면 멤버를 제대로 순환 할 수 있지만 중복을 방지하는 break는 사용할 수 없습니다.
Import-Module ActiveDirectory
#declaring end result group array
$results = @()
#sets path for files
$pathName = $MyInvocation.MyCommand.Path
$pathLen = $pathName.LastIndexOf("\")
$pathStr = $PathName.Substring(0,$pathLen +1)
$APgroupFile = $pathStr + "APGroups.csv"
$groupFile = $pathStr + "GGroups.csv"
#gets the list of group names and loops through them
get-content $groupFile | foreach-object{
#sets all of the group names
#start of if1
if($_.IndexOf("CN=") -ge 0){
$nameStart = $_.IndexOf("CN=")+3
$nameEnd = $_.indexOf(",")-$nameStart
$name = $_.substring($nameStart, $nameEnd)
#issue starts here
#goal is to find member of "specific OU".
#If found, add group to $results. If not, go to next group
$members = get-ADGroupMember -Identity $name
if($members.length -gt 0){
$i=0
for($i=0; $i -le ($members.length -1); $i++){
#need to check users OU for specific OU. If a user is member, save group to .txt. If none are members, move to next group
$OU = $members.toString()
if($OU.indexOf("OU=specific OU") -ge 0){#start of if OU
$results += New-Object psObject -Property @{'GroupName'=$name; 'Member'=$OU}
break
}#end if OU
}#end for mem.length
}#end if mem.length
}#end if1
}#end foreach
$results | Export-Csv $APgroupFile -NoTypeInformation
이것은 처음 테스트 한 후에 작동하는 것으로 보입니다. 너 훌륭해. 감사. – spassen
감사합니다. -Recursive 스위치를 추가하여 중첩 된 멤버쉽을 얻을 수도 있습니다. –