OU의 사용자와 함께 Active Directory에 동적 그룹 만들기


8

내 Active Directory의 특정 OU 사용자와 동적 그룹을 만들고 싶습니다. Exchange 동적 메일 그룹을 사용하여이 작업을 완벽하게 수행 할 수는 있지만 Ex DDL은 메일 전용입니다.

이것을 만들 수있는 방법이 있습니까? System Center를 사용하여이를 처리하는 몇 가지 안내서를 찾았지만 System Center는 옵션이 아닙니다.

미리 감사드립니다.

답변:


11

Active Directory에는 동적 보안 그룹과 같은 것이 없으며 동적 메일 그룹 만 있습니다.

이를 달성하기 위해 가장 실용적인 옵션은 주어진 OU에있는 사람을 결정하고 그에 따라 보안 그룹을 업데이트하는 Powershell 스크립트를 갖는 것입니다.

Import-Module ActiveDirectory
$groupname = PseudoDynamicGroup
$users = Get-ADUser -Filter * -SearchBase "ou=desiredUsers,dc=domain,dc=tld"
foreach($user in $users)
{
  Add-ADGroupMember -Identity $groupname -Member $user.samaccountname -ErrorAction SilentlyContinue
}
$members = Get-ADGroupMember -Identity $groupname
foreach($member in $members)
{
  if($member.distinguishedname -notlike "*ou=desiredUsers,dc=domain,dc=tld*")
  {
    Remove-ADGroupMember -Identity $groupname -Member $member.samaccountname
  }
}

+1 AD 그룹을 최신 상태로 유지하기 위해 이러한 스크립트를 Active Directory에서 정기적으로 실행할 수 있습니까? 아니면 어떻게 든 일부 이벤트 시스템을 구독합니까? 저는 관리자가 아닌 개발자이지만 관리자와 관리자에게 영향을 줄 수 있습니다
Mzn

먼저 제거를 수행합니다. 방금 확인하고 추가 한 사용자 객체를 다시 확인하지 않습니다.
xXhRQ8sD2L7Z

4

나는 내 자신의 질문에 대답하고 있습니다. Mathias의 PowerShell 아이디어로 인터넷에서 이것을 찾았습니다.

https://github.com/davegreen/shadowGroupSync

풍모

  • 하나 이상의 OU에서 단일 그룹으로 사용자 또는 컴퓨터 개체를 동기화합니다.
  • PowerShell Active Directory 필터를 사용하여 섀도 그룹에 포함 된 개체를 필터링하는 기능.
  • 섀도 그룹 유형 (보안 / 분배)을 선택하는 기능.

저자의 블로그 도구의 설계 및 동기에 대한 추가 정보가 포함됩니다.


1
Mathias가 당신을 도운 사람이라면 그의 대답을 받아 들여야합니다. 그는 당신에게 통찰력을 제공합니다!
Mzn

3

이것은 Adaxes로 수행 할 수 있습니다. 기술적으로 사용자가 업데이트 / 이동되면 그룹 멤버쉽을 동적으로 업데이트합니다. 다음은 부서 속성을 기반으로 그룹 구성원을 자동으로 유지 관리하는 방법의 예이지만 OU를 기반으로 동일한 작업을 수행하도록 그룹을 수정하는 것은 매우 쉽습니다. http://www.adaxes.com/tutorials_AutomatingDailyTasks_AddUsersToGroupsByDepartment.htm


1

또한 Active Directory에서 동적 보안 그룹을 만드는 방법을 찾고 Mathias라는 결론에 도달했습니다. 내 솔루션은 그다지 우아하지 않았으므로 예약 된 powershell 스크립트를 사용하여 그룹에서 모든 사용자를 제거한 다음 OU의 사용자로 채 웁니다. 또한 하위 OU 그룹이 부모 OU 보안 그룹에 추가되었는지 확인했습니다.

import-module ActiveDirectory
Get-ADGroupMember OU_GroupName | % { Remove-ADGroupMember 'OU_GroupName' -Members $_ -Confirm:$false}
Get-ADUser -SearchBase 'OU=OUName,OU=ParentOUName,DC=DomainName,DC=TopDomainName' -Searchscope 1 -Filter * | % { Add-ADGroupMember 'OU_GroupName' -Members $_ }
Add-ADGroupMember -Identity "OU_ParentName" -Members "OU_ChildOneName", "OU_ChildTwoName", "OU_ChildThreeName"

이것이 대기업에서 잘 확장되는지 확실하지 않지만 스크립트는 300 명의 사용자 회사에서 몇 분만 사용합니다.


실질적인 유리한 점에서 솔루션은 수백 명의 사용자에게 적합합니다. 그러나 먼저 모든 항목을 추가하고 (중복에 대한 경고 / 오류를 억제 함) 일치하지 않는 항목 만 제거하면 1) AD 개체에 대한 특성 업데이트 수를 최소화하고 2) 누군가가 보안을 인증하고 누락 할 위험이 있습니다. 스크립트가 실행되는 동안 온라인 상태가되면 토큰으로 그룹화하십시오.
Mathias R. Jessen


0

다른 회원이 남긴 진술서 도메인 컨트롤러에서이를 실행하지 않으면 $ domainController를 대체하여 정적 항목을 제공하거나 $ DomainController 다음에 $ DomainController를 추가하고 해당 정보를 전달해야합니다.

그룹에 사용자를 추가하려면

Function AddUserToGroup($Group, $User, $DomainController)
{
 if(!(Get-ADGroupMember -Identity $group | ?{$_.name -eq $User}))
 {
  Add-ADGroupMember -Identity $group -Members $User -Server $DomainController
 }
 else
 {
  return  "The user: $User is already in the $group"
 }
}

사용자를 제거하기 위해 동일한 작업을 수행 할 수 있습니다.

Function RemoveUserFromGroup($Group, $User, $DomainController)
{
 if((Get-ADGroupMember -Identity $group | ?{$_.name -eq $User}))
 {
  Remove-ADGroupMember -Identity $group -Members $User -Server $DomainController
 }
 else
 {
  return "The user: $User is not a member of $group"
 }
}

이제 이것을 사용하려면이 작업을 수행 할 수 있습니다 ...

$Users = Get-Aduser -Filter *
Foreach($user in $users)
{
  AddUserToGroup "SomeGroup" $user.name "ServerName"  
}

또는

비활성화 된 사용자 OU 또는 이것이 발생할 수있는 위치 또는 사이트 나 그룹과 같은 OU를 전환하는 경우 가장 좋습니다.

$Users = Get-Aduser -Filter * 
Foreach($user in $users)
{
  RemoveUserToGroup "SomeGroup" $user.name "ServerName"  
}

이 답변은 목적을 제공하지 않으며 질문에 가치를 전혀 부여하지 않습니다. 기능은 비효율적이며 고유 한 가치를 제공하지 않습니다. 두 기능 모두 1. 호출 횟수를 두 배로 늘립니다. 2. 특히 사용자의 CN을 사용하는 경우에만 작동합니다 (기본 cmdlet 기능 제한). 3. PowerShell 함수의 권장 동사-이름 명명 패턴을 따르지 않습니다. 4. 두 번째 기능은 실제로 사용자를 제거하는 대신 그룹에 사용자를 추가합니다. 6 년 전의 답변은 정확하고 완전하며 기능적입니다. 추가 답변이 필요한 이유가 없습니다.
세미콜론

당신은 열심입니다! 당신은 단지 마음이 좁

하나 더. 내 조직에는 5000 명 이상의 사용자가있는이 정확한 스크립트가 있으며 정상적으로 작동합니다. 함수에 정보를 제공하면됩니다. 또한 작업 DC에서 트리거를 수행하여 새 사용자를 만들거나 비활성화 할 때 트리거 된 이벤트가 실행됩니다. 상자 밖에서 생각하십시오 .......

$ DomainController가 정의되지 않았습니다. "RemoveUserFromGroup"함수는 "Add-ADGroupMember"cmdlet을 사용합니다. "Remove"(Remove-ADGroupMember cmdlet이 실제로 오타 만 사용 된 경우)는 사용자가 그룹에없는 경우에만 작동합니다. 또한 지정된 OU에서 사용자를 얻는 작업을 원격으로 참조하지도 않습니다. 기껏해야이 솔루션은 완전한 솔루션이 이미 제출되어 승인 된 경우 부분적으로 요구되는 부분 솔루션입니다.
세미콜론

경외심, 당신이 무슨 말을했는지 봅니다. LOL-방금 상단을 복사하여 하단에 붙여 넣었습니다. 나는 그것을 수정했습니다 ...이 사용자가 DC에서 스크립트를 실행하지 않는 경우를 대비하여 $ DomainController를 넣었습니다. 다시, 사용자 및 그룹이 제공됩니다. 원하는 경우 간단한 Get-ADUser -Filter *를 실행할 수 있지만 일반적이지 않은 것 같습니다 ... DC 이벤트 로그를 읽고 모든 사용자를 순환하는 대신 새 사용자를 끌어 오는 것이 좋습니다. 그러나 고양이를 껍질을 벗기는 방법은 여러 가지가 있습니다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.