Tạo một nhóm động trong Active Directory với người dùng từ OU


8

Tôi muốn tạo một nhóm động với người dùng từ một OU cụ thể trong Active Directory của tôi. Tôi có thể thực hiện điều này một cách hoàn hảo bằng cách sử dụng Danh sách phân phối động của Exchange, nhưng tất nhiên, Ex DDL chỉ dành cho thư.

Có cách nào để tạo ra cái này không? Tôi đã tìm thấy một số hướng dẫn sử dụng Trung tâm hệ thống để xử lý việc này, nhưng Trung tâm hệ thống không phải là một tùy chọn.

Cảm ơn trước,

Câu trả lời:


11

Không có thứ gọi là Nhóm bảo mật động trong Active Directory, chỉ có các nhóm phân phối động.

Để thực hiện điều này, tôi nghĩ tùy chọn khả thi nhất sẽ là có tập lệnh Powershell xác định ai đang ở trong OU đã cho và cập nhật nhóm bảo mật tương ứng, có thể như thế này:

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 Tôi có thể chạy tập lệnh như vậy trên Active Directory của mình theo định kỳ để đảm bảo các nhóm AD của tôi được cập nhật không? Hoặc có thể bằng cách nào đó đăng ký vào một số hệ thống sự kiện? Tôi là nhà phát triển không phải là quản trị viên nhưng tôi có thể ảnh hưởng đến quản trị viên và người quản lý của mình
Mzn

Tôi sẽ thực hiện xóa trước, để nó không kiểm tra lại các đối tượng người dùng mà chúng tôi vừa kiểm tra (và đã thêm)
xXhRQ8sD2L7Z

4

Tôi đang trả lời câu hỏi của riêng tôi. Với các ý tưởng PowerShell của Mathias tôi đã tìm thấy điều này trên internet:

https://github.com/davegreen/shadowgroupSync

Đặc trưng

  • Đồng bộ hóa các đối tượng người dùng hoặc máy tính từ một hoặc nhiều OU thành một nhóm.
  • Khả năng lọc các đối tượng có trong nhóm bóng bằng Bộ lọc thư mục hoạt động PowerShell.
  • Khả năng chọn loại nhóm bóng (Bảo mật / Phân phối).

Các blog của tác giả có chứa thông tin về thiết kế và động cơ cho công cụ này.


1
Nếu Mathias là người giúp bạn, thì bạn nên chấp nhận câu trả lời của anh ấy. Ông cho bạn cái nhìn sâu sắc!
Mzn

3

Điều này có thể được thực hiện với Adaxes. Về mặt kỹ thuật, nó sẽ tự động cập nhật thành viên nhóm sau khi người dùng được cập nhật / di chuyển. Dưới đây là một ví dụ về cách tự động duy trì tư cách thành viên nhóm dựa trên thuộc tính của Bộ, nhưng rất dễ dàng sửa đổi nó để làm điều tương tự dựa trên OU. http://www.adaxes.com/tutorials_AutomatingD DailyT task_AddUsersTo ERICByDepidor.htmlm


1

Tôi cũng đã tìm cách tạo các nhóm bảo mật động trong Active Directory và đi đến kết luận là Mathias. Giải pháp của tôi không thanh lịch như của anh ấy, tôi sử dụng tập lệnh powershell được lên lịch để xóa tất cả người dùng khỏi các nhóm và sau đó điền chúng với người dùng trong OU. Ngoài ra, tôi đảm bảo rằng các nhóm OU phụ được thêm vào nhóm bảo mật OU gốc nơi nó được trang bị.

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"

Không chắc điều này có quy mô tốt trong một công ty lớn hay không, nhưng kịch bản chỉ sử dụng vài phút trong công ty 300 người dùng của chúng tôi.


Từ một điểm thuận lợi thực tế, giải pháp của bạn là tốt (cho vài trăm người dùng). Tuy nhiên, bằng cách thêm tất cả các cảnh báo / lỗi đầu tiên (và loại bỏ các cảnh báo / lỗi cho các bản sao) và sau đó chỉ xóa các kết quả không khớp, bạn 1) giảm thiểu số lần cập nhật thuộc tính cho đối tượng AD và 2) khắc phục nguy cơ ai đó xác thực và thiếu Bảo mật Nhóm trong mã thông báo của họ, nếu họ tình cờ xuất hiện trong khi tập lệnh của bạn đang chạy.
Mathias R. Jessen


0

Để tuyên bố để lại bởi một thành viên khác. Nếu bạn không chạy cái này từ Bộ điều khiển miền, bạn sẽ cần cung cấp mục nhập tĩnh bằng cách thay thế $ domainContoder hoặc bạn có thể thêm cái khác, theo sau là $ DomainContoder và truyền thông tin đó.

Để thêm người dùng vào một nhóm

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"
 }
}

Để loại bỏ một người dùng, bạn có thể làm điều tương tự.

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"
 }
}

Bây giờ để sử dụng, bạn có thể làm điều này ...

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

hoặc là

Tốt nhất là có một người dùng bị vô hiệu hóa OU hoặc một cái gì đó nơi điều này có thể diễn ra hoặc nếu bạn chuyển đổi OU như trang web hoặc nhóm

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

Câu trả lời này không có mục đích và không có giá trị nào cho câu hỏi cả. Các chức năng là không hiệu quả và không cung cấp giá trị vốn có; cả hai chức năng 1. nhân đôi số lượng cuộc gọi được thực hiện, 2. Cụ thể chỉ hoạt động nếu CN của người dùng được sử dụng (giới hạn chức năng cmdlets gốc), 3. không tuân theo mẫu đặt tên Verb-Noun được đề xuất của các chức năng PowerShell, và 4. chức năng thứ hai thực sự THÊM người dùng vào một nhóm, thay vì loại bỏ chúng. Câu trả lời được chấp nhận từ 6 năm trước là chính xác, đầy đủ và đầy đủ chức năng. Tôi thấy không có lý do tại sao bất kỳ câu trả lời bổ sung là cần thiết.
Dấu chấm phẩy

Bạn sốt sắng! Có phải bạn chỉ là người có đầu óc hẹp hòi

Một điều nữa. Tôi có tập lệnh chính xác này trong org của tôi với hơn 5000 người dùng và nó hoạt động tốt. Bạn chỉ cần cung cấp cho các chức năng thông tin. Cũng lưu ý, chúng tôi có các kích hoạt được thực hiện trên một nhiệm vụ DC nơi nó thực hiện một sự kiện được kích hoạt khi người dùng mới được tạo hoặc vô hiệu hóa. Xin vui lòng, suy nghĩ bên ngoài hộp ................

$ DomainControll không được xác định. Hàm "RemoveUserFromgroup" của bạn sử dụng lệnh ghép ngắn "Add-ADgroupMember". "Xóa" của bạn (nếu lệnh ghép ngắn Remove-ADgroupMember thực sự chỉ là một lỗi đánh máy được sử dụng) chỉ hoạt động nếu người dùng không ở trong nhóm. Bạn cũng không tham khảo từ xa nhiệm vụ lấy người dùng từ một OU được chỉ định. Tốt nhất, đó là một giải pháp một phần công việc cần thiết - khi một giải pháp hoàn chỉnh đã được đệ trình và chấp nhận.
Dấu chấm phẩy

Thật đáng sợ, tôi thấy những gì bạn đang nói về. LOL - Tôi chỉ sao chép phần trên và dán nó xuống dưới cùng. Tôi đã sửa nó ... $ DomainControll được đặt ở đó trong trường hợp người dùng này không chạy tập lệnh từ DC. Một lần nữa, người dùng và nhóm được cung cấp. Bạn có thể chạy Get-ADUser -Filter * đơn giản nếu bạn muốn, nhưng điều đó có vẻ trần tục ... Sẽ tốt hơn nếu chỉ đọc nhật ký sự kiện DC và kéo người dùng mới thay vì đạp xe qua mọi người dùng. Nhưng này, có nhiều hơn một cách để lột da một con mèo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.