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.