Membuat Grup Dinamis dalam Direktori Aktif dengan pengguna dari OU

8

Saya ingin membuat grup dinamis dengan pengguna dari OU tertentu di Direktori Aktif saya. Saya dapat melakukan ini dengan sempurna menggunakan Daftar Distribusi Dinamis Exchange, tetapi tentu saja, Ex DDL hanya untuk surat.

Ada cara untuk membuat ini? Saya telah menemukan beberapa panduan menggunakan System Center untuk menangani ini, tetapi System Center bukanlah suatu pilihan.

Terima kasih sebelumnya,

Vinícius Ferrão
sumber

Jawaban:

11

Tidak ada yang namanya Grup Keamanan Dinamis di Direktori Aktif, hanya grup Distribusi Dinamis.

Untuk mencapai ini, saya pikir opsi yang paling mungkin adalah memiliki skrip Powershell yang menentukan siapa yang diberi OU dan memperbarui grup keamanan yang sesuai, mungkin seperti ini:

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
  }
}
Mathias R. Jessen
sumber
+1 Dapatkah saya menjalankan skrip seperti itu di Direktori Aktif saya secara berkala untuk memastikan bahwa grup AD saya mutakhir? Atau mungkin entah bagaimana berlangganan beberapa sistem acara? Saya seorang pengembang bukan administrator tetapi saya dapat memengaruhi administrator dan manajer saya
Mzn
Saya akan melakukan penghapusan terlebih dahulu, supaya tidak mengecek kembali objek pengguna yang baru saja kami periksa (dan ditambahkan)
xXhRQ8sD2L7Z
4

Saya menjawab pertanyaan saya sendiri. Dengan ide-ide PowerShell dari Mathias saya telah menemukan ini di internet:

https://github.com/davegreen/shadowGroupSync

fitur

  • Sinkronkan objek pengguna atau komputer dari satu atau lebih OU ke satu grup.
  • Kemampuan untuk menyaring objek yang termasuk dalam grup bayangan menggunakan Filter Direktori PowerShell Active.
  • Kemampuan untuk memilih jenis grup bayangan (Keamanan / Distribusi).

The blog penulis mengandung informasi tambahan tentang desain dan motif untuk alat.

Vinícius Ferrão
sumber
1
Jika Mathias adalah orang yang membantu Anda, maka Anda harus menerima jawabannya. Dia memberi Anda wawasan!
Mzn
1

Saya juga mencari cara untuk membuat grup keamanan dinamis di Active Directory, dan sampai pada kesimpulan sebagai Mathias. Solusi saya tidak seanggun miliknya, saya menggunakan skrip PowerShell yang dijadwalkan untuk menghapus semua pengguna dari grup, dan kemudian mengisinya dengan para pengguna di OU. Selain itu saya memastikan bahwa sub-OUs grup ditambahkan ke grup keamanan OU induk di mana ia dipasang.

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"

Tidak yakin apakah ini berskala baik di perusahaan besar, tetapi skrip hanya menggunakan beberapa menit di 300 perusahaan pengguna kami.

Espen Olsen
sumber
Dari sudut pandang praktis, solusi Anda baik-baik saja (untuk beberapa ratus pengguna). Namun, dengan menambahkan semua pertama (dan menekan peringatan / kesalahan untuk duplikat), dan kemudian hanya menghapus ketidakcocokan, Anda 1) meminimalkan jumlah pembaruan atribut ke objek AD dan 2) mengatasi risiko seseorang mengotentikasi dan kehilangan Keamanan. Kelompokkan dalam token mereka, seandainya itu terjadi online ketika skrip Anda berjalan.
Mathias R. Jessen
0

Ke pernyataan yang ditinggalkan oleh anggota lain. Jika Anda tidak menjalankan ini dari Kontroler Domain, Anda harus menyediakan entri statis dengan mengganti $ domainController atau Anda dapat menambahkan yang lain, diikuti oleh $ DomainController dan meneruskan info itu.

Untuk menambahkan pengguna ke grup

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

Untuk menghapus pengguna, Anda dapat melakukan hal yang sama.

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

Sekarang untuk menggunakan ini, Anda dapat melakukan ini ...

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

atau

Akan lebih baik untuk memiliki pengguna yang dinonaktifkan OU atau sesuatu di mana ini dapat terjadi atau jika Anda beralih OU seperti situs atau grup

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

sumber
Respons ini tidak melayani tujuan dan sama sekali tidak menambah nilai pertanyaan. Fungsi-fungsinya tidak efisien dan tidak memberikan nilai yang melekat; kedua fungsi 1. gandakan jumlah panggilan yang harus dilakukan, 2. Khususnya hanya berfungsi jika CN pengguna digunakan (membatasi fungsionalitas cmdlet asli), 3. tidak mengikuti pola penamaan Verb-Noun yang disarankan untuk fungsi PowerShell, dan 4. fungsi kedua sebenarnya MENAMBAH pengguna ke grup, alih-alih menghapusnya. Jawaban yang diterima dari 6 tahun yang lalu adalah akurat, lengkap, dan fungsional. Saya tidak melihat alasan mengapa diperlukan jawaban tambahan.
Titik koma
Kamu fanatik! Itu membuat Anda berpikiran sempit
Satu hal lagi. Saya memiliki skrip persis ini di org saya dengan lebih dari 5000 pengguna dan berfungsi dengan baik. Anda hanya perlu memberi makan fungsi informasi. Juga perhatikan, kami telah memicu dilakukan pada tugas DC di mana ia menjalankan acara yang dipicu ketika pengguna baru dibuat atau dinonaktifkan. Tolong, pikirkan di luar kotak ................
$ DomainController tidak ditentukan. Fungsi "RemoveUserFromGroup" Anda menggunakan cmdlet "Add-ADGroupMember". "Hapus" Anda (jika cmdlet Hapus-ADGroupMember sebenarnya hanya salah ketik yang digunakan) hanya berfungsi jika pengguna tidak ada dalam grup. Anda juga tidak merujuk bahkan tugas untuk mendapatkan pengguna dari OU tertentu. Paling-paling, ini adalah solusi parsial-kebutuhan-kerja - ketika solusi lengkap sudah diajukan dan diterima.
Titik koma
Awe, aku mengerti apa yang kamu bicarakan. LOL - Saya baru saja menyalin bagian atas dan menempelkannya ke bagian bawah. Saya telah memperbaikinya ... $ DomainController diletakkan di sana kalau-kalau pengguna ini tidak menjalankan skrip dari DC. Sekali lagi, pengguna dan grup disediakan. Anda dapat menjalankan Get-ADUser -Filter * sederhana jika Anda mau, tetapi itu tampak biasa ... Akan lebih baik untuk hanya membaca log peristiwa DC dan menarik pengguna baru daripada bersepeda melalui setiap pengguna. Tapi hei, ada lebih dari satu cara menguliti kucing