Pengguna aktif Powershell. Mengelola Grup AD Menggunakan PowerShell

Didedikasikan untuk menggunakan PowerShell untuk mengelola AD. Sebagai titik awal, penulis memutuskan untuk mengambil 10 tugas umum administrasi AD dan melihat bagaimana tugas tersebut dapat disederhanakan menggunakan PowerShell:

  1. Setel ulang kata sandi pengguna
  2. Aktifkan dan nonaktifkan akun
  3. Buka kunci akun pengguna
  4. Hapus akun
  5. Temukan grup kosong
  6. Tambahkan pengguna ke grup
  7. Daftar anggota kelompok
  8. Temukan akun komputer yang ketinggalan jaman
  9. Nonaktifkan akun komputer
  10. Temukan komputer berdasarkan jenisnya

Selain itu, penulis mengelola blog (tentu saja menggunakan PowerShell), kami sarankan untuk melihat - jdhitsolutions.com/blog. Dan Anda bisa mendapatkan informasi terkini dari Twitter-nya twitter.com/jeffhicks.
Nah, di bawah ini adalah terjemahan artikel “Top 10 Direktori Aktif Tugas Diselesaikan dengan PowerShell.”

Manajemen Direktori Aktif (AD) dengan menggunakan Windows PowerShell lebih mudah dari yang Anda kira, dan saya ingin membuktikannya kepada Anda. Anda cukup mengambil skrip di bawah ini dan menggunakannya untuk menyelesaikan sejumlah tugas manajemen AD.

Persyaratan

Untuk menggunakan PowerShell untuk mengelola AD, Anda harus memenuhi beberapa persyaratan. Saya akan mendemonstrasikan cara kerja cmdlet AD menggunakan komputer Windows 7 sebagai contoh.
Untuk menggunakan cmdlet, Anda harus memiliki level pengontrol domain Server Windows 2008 R2, atau Anda dapat mengunduh dan menginstal Layanan Gateway Manajemen Direktori Aktif pada pengontrol domain lama (DC lama). Harap baca dokumentasi dengan seksama sebelum instalasi; Diperlukan reboot CD.
Di sisi klien, unduh dan instal (RSAT) untuk Windows 7 atau Windows 8. Di Windows 7, Anda harus membukanya Panel kontrol ( Panel Kontrol) bab Program dan pilih Hidupkan atau matikan Fitur Windows(Mengaktifkan atau Menonaktifkan Fitur Windows). Menemukan Alat Administrasi Server Jarak Jauh dan memperluas bagian tersebut Alat Administrasi Peran. Pilih item yang sesuai untuk Alat AD DS dan AD LDS, terutama perhatikan bahwa item tersebut harus dipilih Modul Direktori Aktif untuk Windows PowerShell , seperti yang ditunjukkan pada Gambar 1. (Di Windows 8, semua alat dipilih secara default). Sekarang kami siap bekerja.

Gbr.1 Mengaktifkan Alat AD DS dan AD LDS

Saya masuk dengan akun dengan hak administrator domain. Sebagian besar cmdlet yang akan saya tunjukkan memungkinkan Anda menentukan kredensial alternatif. Bagaimanapun, saya sarankan membaca bantuan ( Dapatkan Bantuan) dan contoh yang akan saya tunjukkan di bawah ini.
Mulai sesi PowerShell dan impor modul:

PS C:\> Impor-Modul ActiveDirectory

Impor membuat PSDrive baru, tetapi kami tidak akan menggunakannya. Namun, Anda dapat melihat perintah apa saja yang tersedia di modul yang diimpor.

PS C:\> dapatkan-perintah -modul ActiveDirectory

Kelebihan dari perintah ini adalah jika saya dapat menggunakan perintah pada satu objek AD, maka perintah tersebut dapat digunakan pada 10, 100, dan bahkan 1000. Mari kita lihat cara kerja beberapa cmdlet ini.

Tugas 1: Reset kata sandi pengguna

Mari kita mulai dengan tugas umum: mengatur ulang kata sandi pengguna. Anda dapat melakukannya dengan mudah dan sederhana menggunakan cmdlet Setel-ADAccountPassword. Bagian rumitnya adalah kata sandi baru harus memenuhi syarat sebagai string yang dilindungi: sepotong teks yang dienkripsi dan disimpan dalam memori selama sesi PowerShell. Pertama, mari buat variabel dengan kata sandi baru:
PS C:\> $new=Baca-Host "Masuk yang baru kata sandi" -AsSecureString

Kemudian, masukkan kata sandi baru:

Sekarang kita dapat mengekstrak akun (menggunakan samNama Akun– pilihan terbaik) dan atur kata sandi baru. Berikut ini contoh untuk pengguna Jack Frost:

PS C:\> Set-ADAccountPassword jfrost -Kata Sandi Baru $baru

Sayangnya, ada bug pada cmdlet ini: -Passthru, -Bagaimana jika, Dan -Mengonfirmasi tidak bekerja. Jika Anda lebih suka jalan pintas, coba ini:

PS C:\> Set-ADAccountPassword jfrost -NewPassword (ConvertTo-SecureString -AsPlainText -String "P@ssw0rd1z3" -force)

Akibatnya, saya memerlukan Jack untuk mengubah kata sandinya saat dia masuk lagi, jadi saya memodifikasi akun tersebut menggunakan Set-Pengguna ADU.

PS C:\> Set-ADUser jfrost -UbahPasswordAtLogon $True

Hasil menjalankan cmdlet tidak ditulis ke konsol. Jika ini perlu dilakukan, gunakan -BENAR. Namun saya dapat mengetahui berhasil atau tidaknya operasi tersebut dengan mengambil nama pengguna menggunakan cmdlet Dapatkan-Pengguna ADU dan menentukan propertinya Kata Sandi Kedaluwarsa, seperti yang ditunjukkan pada Gambar 2.


Beras. 2. Hasil Cmdlet Get-ADUser dengan properti PasswordExpired

Intinya: setel ulang kata sandi pengguna dari menggunakan PowerShell tidak sulit sama sekali. Saya akui untuk mereset password juga mudah melalui snap Pengguna dan Komputer Direktori Aktif konsol Konsol Manajemen Microsoft (MMC). Namun penggunaan PowerShell cocok jika Anda perlu mendelegasikan tugas, tidak ingin menerapkan snap-in yang disebutkan di atas, atau menyetel ulang kata sandi sebagai bagian dari proses TI otomatis yang besar.

Tugas 2: Mengaktifkan dan menonaktifkan akun

Sekarang mari kita nonaktifkan akun tersebut. Mari terus bekerja dengan Jack Frost. Kode ini menggunakan parameter –Bagaimana jika, yang dapat Anda temukan di comadlet lain yang membuat perubahan untuk menguji perintah saya tanpa menjalankannya.

PS C:\> Disable-ADAccount jfrost -whatif Bagaimana jika: Melakukan operasi "Set" pada Target "CN=Jack Frost, OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local".

Sekarang mari kita nonaktifkan secara nyata:

PS C:\> Nonaktifkan-ADAAccount jfrost

Dan ketika tiba saatnya untuk mengaktifkan akun, cmdlet manakah yang akan membantu kita?

PS C:\> Aktifkan-ADAccount jfrost

Cmdlet ini dapat digunakan dalam ekspresi pipeline, memungkinkan Anda mengaktifkan atau menonaktifkan akun sebanyak yang Anda suka. Misalnya kode ini akan menonaktifkan semua akun di departemen Penjualan

PS C:\> get-aduser -filter "departemen -eq "penjualan"" | nonaktifkan-akun

Tentu saja, tulis filter untuk Dapatkan-Pengguna ADU cukup rumit, namun disinilah kegunaan parameternya –Bagaimana jika bersama dengan cmdlet Nonaktifkan-ADAccount datang untuk menyelamatkan.

Tugas 3: Membuka kunci akun pengguna

Pertimbangkan situasi di mana Jack mengunci akunnya saat mencoba memasukkan kata sandi baru. Daripada mencoba menemukan akunnya melalui GUI, prosedur membuka kunci dapat dilakukan dengan menggunakan perintah sederhana.

PS C:\> Buka kunci-ADAAccount jfrost

Cmdlet juga mendukung parameter -Bagaimana jika Dan -Mengonfirmasi.

Tugas 4: Hapus akun

Tidak peduli berapa banyak pengguna yang Anda hapus - ini mudah dilakukan menggunakan cmdlet Hapus-ADUser. Saya tidak ingin menghapus Jack Frost, tetapi jika saya mau, saya akan menggunakan kode seperti ini:

PS C:\> Hapus-ADUser jfrost -bagaimana jika: Melakukan operasi "Hapus" pada Target "CN=Jack Frost,OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local".

Atau saya dapat memasukkan banyak pengguna dan menghapusnya dengan satu perintah sederhana:

PS C:\> get-aduser -filter "enabled -eq "false"" -property WhenChanged -SearchBase "OU=Karyawan, DC=Globomantics,DC=Lokal" | di mana ($_.WhenChanged -le (Get-Date).AddDays(-180)) | Hapus-ADuser -whatif

Perintah ini akan menemukan dan menghapus semua akun OU Karyawan yang dinonaktifkan dan belum diubah selama 180 hari atau lebih.

Tugas 5: Menemukan grup kosong

Mengelola kelompok adalah tugas tanpa akhir dan tanpa pamrih. Ada banyak cara untuk menemukan grup kosong. Beberapa ekspresi mungkin berfungsi lebih baik dibandingkan yang lain, bergantung pada organisasi Anda. Kode di bawah ini akan menemukan semua grup di domain, termasuk grup bawaan.

PS C:\> dapatkan-grup iklan -filter * | di mana (-Tidak ($_ | dapatkan-anggota grup iklan)) | Pilih Nama

Jika Anda memiliki grup dengan ratusan anggota, menggunakan perintah ini bisa memakan waktu lama; Dapatkan-ADGroupMember memeriksa setiap kelompok. Kalau bisa dibatasi atau disesuaikan akan lebih baik.
Inilah pendekatan lain:

PS C:\> get-adgroup -filter "anggota -notlike "*" -AND GroupScope -eq "Universal"" -SearchBase "OU=Grup,OU=Karyawan,DC=Globomantics, DC=lokal" | Pilih Nama,Grup*

Perintah ini menemukan semua grup Universal yang tidak memiliki keanggotaan di Grup OU dan menampilkan beberapa properti. Hasilnya ditunjukkan pada Gambar 3.


Beras. 3. Cari dan filter grup universal

Tugas 6: Menambahkan pengguna ke grup

Mari tambahkan Jack Frost ke grup IT Chicago:

PS C:\> tambahkan-anggota grup iklan "chicago IT" -Anggota jfrost

Ya, sesederhana itu. Anda juga dapat dengan mudah menambahkan ratusan pengguna ke grup, meskipun menurut saya ini agak janggal:

PS C:\> Tambahkan-ADGroupMember "Karyawan Chicago" -anggota (get-aduser -filter "city -eq "Chicago"")

Saya menggunakan ekspresi pipeline dalam tanda kurung untuk menemukan semua pengguna yang memiliki properti City di Chicago. Kode dalam tanda kurung dieksekusi dan objek yang dihasilkan diteruskan ke parameter –Member. Setiap objek pengguna ditambahkan ke grup Karyawan Chicago. Tidak masalah apakah kita berurusan dengan 5 atau 5000 pengguna, memperbarui keanggotaan grup hanya membutuhkan beberapa detik. Ungkapan ini juga dapat ditulis menggunakan UntukSetiap Objek apa yang mungkin lebih nyaman:

PS C:\> Dapatkan-ADUser -filter "city -eq "Chicago"" | foreach (Tambahkan-ADGroupMember "Karyawan Chicago" -Anggota $_)

Tugas 7: Membuat daftar anggota kelompok

Anda mungkin ingin tahu siapa yang termasuk dalam kelompok tertentu. Misalnya, Anda harus mencari tahu secara berkala siapa yang menjadi anggota grup Admin Domain:

PS C:\> Dapatkan-ADGroupMember "Admin Domain"

Gambar 4 menunjukkan hasilnya.


Beras. 4. Anggota grup Admin Domain

Cmdlet menampilkan objek AD untuk setiap anggota grup. Apa yang harus dilakukan dengan grup bersarang? Grup saya Chicago Semua Pengguna adalah kumpulan grup bersarang. Untuk mendapatkan daftar semua akun, saya hanya perlu menggunakan parameternya –Rekursif.

PS C:\> Dapatkan-ADGroupMember "Chicago Semua Pengguna" -Rekursif | Pilih Nama Terhormat

Jika Anda ingin menggunakan cara lain - temukan di grup mana pengguna berada - gunakan properti pengguna AnggotaDari:

PS C:\> get-aduser jfrost -property Memberof | Pilih -ExpandProperty memberOf CN=NewTest,OU=Groups,OU=Karyawan, DC=GLOBOMANTICS,DC=local CN=Chicago Test,OU=Groups,OU=Karyawan, DC=GLOBOMANTICS,DC=local CN=Chicago IT,OU= Grup,OU=Karyawan, DC=GLOBOMANTICS,DC=lokal CN=Pengguna Penjualan Chicago,OU=Grup,OU=Karyawan, DC=GLOBOMANTICS,DC=lokal

Saya menggunakan parameternya -Perluas Properti untuk menampilkan nama AnggotaDari seperti garis.

Tugas 8: Menemukan akun komputer yang sudah ketinggalan zaman

Saya sering ditanyai pertanyaan ini: “Bagaimana cara menemukan akun komputer yang sudah ketinggalan zaman?” Dan saya selalu menjawab: “Apa yang ketinggalan jaman bagi Anda?” Perusahaan memiliki definisi berbeda tentang kapan akun komputer (atau pengguna, apa pun) dianggap usang dan tidak dapat digunakan lagi. Bagi saya, saya memperhatikan akun-akun yang kata sandinya sudah lama tidak diubah. periode tertentu waktu. Periode ini bagi saya adalah 90 hari - jika komputer belum mengubah kata sandi beserta domainnya selama periode ini, kemungkinan besar komputer tersebut offline dan ketinggalan jaman. Cmdlet digunakan Dapatkan-ADComputer:

PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -properties *| Pilih nama, kata sandi yang terakhir disetel

Filter berfungsi baik dengan nilai keras, tetapi kode ini akan diperbarui untuk semua akun komputer yang belum mengubah kata sandinya sejak 1 Januari 2012. Hasilnya ditunjukkan pada Gambar 5.


Beras. 5. Temukan akun komputer yang sudah ketinggalan zaman

Pilihan lain: misalkan Anda setidaknya berada pada tingkat fungsional domain Windows 2003. Filter berdasarkan properti Stempel Waktu Masuk Terakhir. Nilai ini adalah jumlah interval 100 nanodetik sejak 1 Januari 1601, dan disimpan dalam GMT, jadi menggunakan nilai ini sedikit rumit:

PS C:\> get-adcomputer -filter "LastlogonTimestamp -gt 0" -properties * | pilih nama, stempel waktu logon terakhir, @(Nama = "Logon Terakhir"; Ekspresi = (:: FromFileTime ($_. Stempel waktu logon terakhir))), kata sandi set terakhir | Urutkan LastLogonTimeStamp


Beras. 6. Konversikan nilai LastLogonTimeStamp ke format yang sudah dikenal

Untuk membuat filter, saya perlu mengubah tanggal, misalnya 1 Januari 2012, ke dalam format yang benar. Konversi dilakukan di FileTime:

PS C:\> $cutoff=(Dapatkan Tanggal "1/1/2012").ToFileTime() PS C:\> $cutoff 129698676000000000

Sekarang saya dapat menggunakan variabel ini di filter untuk Dapatkan-ADComputer:

PS C:\> Dapatkan-ADComputer -Filter "(lastlogontimestamp -lt $cutoff) -or (lastlogontimestamp -notlike "*")" -property * | Pilih Nama, Stempel Waktu Logon Terakhir, Kata SandiLastSet

Kode di atas menemukan komputer yang sama seperti yang ditunjukkan pada Gambar 5.

Tugas 9: Menonaktifkan akun komputer

Mungkin ketika Anda menemukan akun yang tidak aktif atau ketinggalan jaman, Anda ingin menonaktifkannya. Hal ini cukup mudah dilakukan. Kami akan menggunakan cmdlet yang sama yang kami gunakan untuk bekerja dengan akun pengguna. Anda dapat memperjelasnya dengan menggunakan samNama Akun akun.

PS C:\> Disable-ADAccount -Identity "chi-srv01$" -whatif Bagaimana jika: Melakukan operasi "Set" pada Target "CN=CHI-SRV01, CN=Computers,DC=GLOBOMANTICS,DC=local".

Atau menggunakan ekspresi pipa:

PS C:\> dapatkan-adcomputer "chi-srv01" | Nonaktifkan-ADAccount

Saya juga dapat menggunakan kode saya untuk menemukan akun lama dan menonaktifkan semuanya:

PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -properties *| Nonaktifkan-ADAccount

Tugas 10: Menemukan komputer berdasarkan jenisnya

Saya juga sering ditanya bagaimana cara menemukan akun komputer berdasarkan jenisnya, seperti server atau workstation. Ini membutuhkan kreativitas dari Anda. Tidak ada apa pun di AD yang membedakan server dari klien, kecuali mungkin OS. Jika komputer Anda menjalankan Windows Server 2008, Anda harus melakukan beberapa langkah tambahan.
Pertama, Anda perlu mendapatkan daftar sistem operasi, lalu kami memfilter akun berdasarkan sistem operasi yang tersedia.

PS C:\> Dapatkan-ADComputer -Filter * -Properti Sistem Operasi | Pilih Sistem Operasi -unik | Urutkan Sistem Operasi

Hasilnya ditunjukkan pada Gambar 7.


Beras. 7. Mengambil daftar OS

Saya ingin mencari semua komputer yang menjalankan OS server:

PS C:\> Dapatkan-ADComputer -Filter "OperatingSystem -like "*Server*"" -properties OperatingSystem,OperatingSystem ServicePack | Pilih Nama,Op* | daftar format

Hasilnya ditunjukkan pada Gambar 8.

Seperti cmdlet AD Get lainnya, Anda dapat mengonfigurasinya parameter pencarian dan batasi permintaan ke masing-masing OU jika perlu. Semua ekspresi yang saya tunjukkan dapat diintegrasikan ke dalam ekspresi PowerShell yang lebih besar. Misalnya, Anda dapat mengurutkan, mengelompokkan, menerapkan filter, mengekspor ke CSV, atau membuat dan mengirimkan laporan HTML melalui email - semuanya dari PowerShell! Dalam hal ini, Anda tidak perlu menulis satu skrip pun.
Ini bonusnya: laporan usia kata sandi pengguna, disimpan dalam file HTML:

PS C:\> Dapatkan-ADUser -Filter "Diaktifkan -eq "True" -DAN PasswordNeverExpires -eq "False"" -Properties PasswordLastSet,PasswordNeverExpires,PasswordExpired | Pilih DistinguishedName,Name,pass*,@(Name="PasswordAge"; Expression=((Get-Date)-$_.PasswordLastSet)) |sort PasswordAge -Descending | ConvertTo-Html -Judul "Laporan Usia Kata Sandi" | Out-File c:\Work\pwage.htm !}

Meskipun ungkapan ini mungkin terlihat sedikit menakutkan, padahal pengetahuan yang minim PowerShell mudah digunakan. Dan yang tersisa hanyalah tip terakhir: cara mendefinisikan properti khusus yang disebut Usia Kata Sandi. Nilai tersebut mewakili kesenjangan antara hari ini dan properti PasswordLastSet. Lalu saya mengurutkan hasilnya untuk properti baru saya. Gambar 9 menunjukkan keluaran untuk domain pengujian kecil saya.

Pembaruan:
Postingan tersebut berisi terjemahan artikel di portal

Pada artikel ini, kita akan melihat kemampuan PowerShell untuk mengelola grup. domain Aktif Direktori. Kami akan melihat cara membuatnya grup baru di AD, tambahkan pengguna ke dalamnya (atau hapus), tampilkan daftar pengguna grup dan beberapa lainnya tindakan yang bermanfaat dengan grup domain, yang sangat berguna dalam administrasi sehari-hari. Untuk mengelola grup AD, modul Active Directory PowerShell menyediakan cmdlet dasar berikut:

Untuk menggunakan cmdlet ini di sesi Anda, PowerShell harus dimuat modul khusus interaksi dengan IKLAN - Modul Direktori Aktif untuk Windows PowerShell. Modul ini pertama kali diperkenalkan di Windows Server 208 R2. Di Windows Server 2012 dan lebih tinggi, modul ini diaktifkan secara default. Pada komputer klien, ini dapat diinstal dan diaktifkan sebagai salah satu komponen RSAT. Anda dapat memeriksa apakah modul dimuat seperti ini:

Dapatkan-Modul -Daftar tersedia

Seperti yang Anda lihat, modul ActiveDirectory dimuat. Jika tidak, impor dengan perintah:

Direktori aktif Impor-Modul

Daftar lengkap perintah modul dapat diperoleh sebagai berikut:

Dapatkan-Perintah -Modul ActiveDirectory

Ada total 147 cmdlet yang tersedia dalam modul, 11 di antaranya dapat digunakan secara berkelompok.

Dapatkan-Perintah -Modul ActiveDirectory -Nama "*Grup*"

Ini daftarnya:

  • Tambahkan-ADPrincipalGroupMembership
  • Dapatkan-ADAccountAuthorizationGroup
  • Dapatkan-ADGroup
  • Dapatkan-ADGroupMember
  • Dapatkan Keanggotaan ADPrincipalGroup
  • Grup Iklan Baru
  • Hapus-ADGroup
  • Hapus-ADPrincipalGroupMembership
  • Set-ADGroup

Mari buat grup baru di wadah Direktori Aktif (OU) yang ditentukan menggunakan perintah Grup Iklan Baru:

GrupAD Baru "TestADGroup" -path "OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru" -GroupScope Global -PassThru –Verbose

Menggunakan atribut Keterangan Anda dapat menentukan deskripsi grup, dan menggunakan Nama Tampilan mengubah nama tampilan.

Parameter Lingkup Grup Anda dapat mengatur salah satunya jenis berikut kelompok:

  • 0 = DomainLokal
  • 1 = Global
  • 2 = Universal

Anda dapat membuat grup distribusi seperti ini:

GrupAD Baru "TestADGroup-Distr" -path "OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru" -GroupCategory Distribution -GroupScope Global -PassThru –Verbose

Add-AdGroupMember – menambahkan pengguna ke grup AD

Anda dapat menambahkan pengguna ke grup Direktori Aktif menggunakan Add- Anggota Grup Iklan. Mari tambahkan dua pengguna ke grup baru:

Tambahkan-AdGroupMember -Tes IdentitasADGroup -Anggota pengguna1, pengguna2

Jika daftar pengguna yang perlu ditambahkan ke grup cukup banyak, Anda dapat menyimpan daftar akun ke file CSV, lalu mengimpor file dan menambahkan setiap pengguna ke grup.

Format file CSV adalah sebagai berikut (daftar pengguna satu per baris, nama kolom – pengguna)

Impor-CSV .\users.csv -Header pengguna | ForEach-Object (Tambahkan-AdGroupMember -Identitas 'TestADGroup' -anggota $_.users)

Untuk mendapatkan semua anggota dari satu grup (grupA) dan menambahkan mereka ke grup lain (grupB), gunakan perintah ini:

Dapatkan-ADGroupMember “GroupA” | Dapatkan-Pengguna ADU | ForEach-Object(Tambahkan-ADGroupMember -Identitas “Grup-B” -Anggota$_)

Jika Anda perlu menyalin anggota semua grup yang disarangkan ke grup baru (secara rekursif), Anda perlu menggunakan perintah berikut:

Dapatkan-ADGroupMember -Identitas “GroupA” -Rekursif | Dapatkan-Pengguna ADU | ForEach-Object(Tambahkan-ADGroupMember -Identitas “GroupB” -Members$_)

Hapus-ADGroupMember – menghapus pengguna dari grup

Untuk menghapus pengguna dari grup AD, Anda harus menggunakan perintah Hapus-ADGroupMember. Mari kita hapus dua pengguna dari grup:

Hapus-ADGroupMember -Identity TestADGroup -Anggota pengguna1, pengguna2

Konfirmasikan penghapusan pengguna dari grup:

Jika Anda perlu menghapus pengguna dari grup berdasarkan daftar dari file CSV, gunakan perintah ini:

Impor-CSV .\users.csv -Header pengguna | ForEach-Object (Hapus-ADGroupMember -Identitas 'TestADGroup' -anggota $_.users)

Get-ADGroup – mendapatkan informasi tentang grup AD

Cmdlet akan membantu Anda mendapatkan informasi tentang grup Dapatkan-ADGroup:

Dapatkan-ADGroup "TestADGroup"

Perintah ini menampilkan informasi tentang atribut utama grup (DN, tipe grup, nama, SID). Untuk menampilkan nilai semua atribut grup domain AD, jalankan perintah berikut:

Dapatkan-ADGroup "TestADGroup" -properti *

Seperti yang Anda lihat, atribut seperti waktu pembuatan dan modifikasi grup, deskripsi, dll. kini ditampilkan.

Menggunakan cmdlet Get-ADGroup, Anda dapat menemukan semua grup yang Anda minati menggunakan pola tertentu. Misalnya, Anda perlu menemukan semua grup AD yang namanya mengandung frasa tersebut admin :

Dapatkan-ADGroup -LDAPFilter “(nama=*admin*)” | Format-Tabel

Get-ADGroupMember – menampilkan daftar pengguna grup AD

Menampilkan daftar pengguna grup:

Dapatkan-ADGroupMember "TestADGroup"

Untuk hanya menyisakan nama pengguna di hasil, jalankan:

Dapatkan-ADGroupMember "TestADGroup"| nama kaki

Jika di grup ini grup domain lain diaktifkan untuk ditampilkan daftar lengkap anggota, termasuk semua grup bersarang, menggunakan parameter ini Rekursif.

Dapatkan-ADGroupMember 'server-admins" -rekursif| nama ft

Untuk mengunggah daftar akun milik grup tertentu ke file CSV (untuk penggunaan lebih lanjut di Excel), jalankan perintah berikut:

Dapatkan-ADGroupMember 'server-admins" -rekursif| ft samaccountname| File Keluar c:\ps\admins.csv

Untuk menambahkan data akun pengguna di AD ke file teks, kita akan menggunakan cmdlet. Misalnya, selain akun, Anda perlu menampilkan posisi dan nomor telepon pengguna grup:

Dapatkan-ADGroupMember -Identitas 'server-admin' -rekursif| foreach ( Dapatkan-ADUser $_ -judul properti, OfficePhone|Judul Objek Pilihan, OfficePhone )

(Dapatkan-ADGroupMember -Identitas "admin domain").Hitungan

Ternyata di grup “admin domain” kami memiliki 7 akun administrator.

Untuk menemukan daftar grup kosong di OU tertentu, gunakan perintah berikut:

Dapatkan-ADGroup -Filter * -Properti Anggota -searchbase “OU=Moscow,DC=corp,dc=winitpro,DC=ru” | di mana (-bukan $_.anggota) | pilih Nama

0

Saya memiliki skrip kerja berikut yang memeriksa apakah daftar besar pengguna dalam file CSV adalah anggota grup AD dan menulis hasilnya ke result.csv.

Tidak yakin bagaimana cara mengonversi skrip sehingga saya dapat mengubah $group = "InfraLite" menjadi $group = DC .\List_Of_AD_Groups.CSV .

Jadi skrip tidak hanya mengembalikan kecocokan untuk satu grup AD, tetapi juga mengembalikan kecocokan untuk 80 grup AD yang terdapat dalam List_of_AD_groups.csv. Menulis YA/TIDAK untuk setiap grup AD di kolom CSV baru (atau jika tidak memungkinkan, membuat file CSV terpisah untuk setiap grup dengan hasil yang sama.

Saya dapat melakukan ini secara manual dengan mengubah nilai dari $group dan nama file ekspor dan menjalankan kembali skrip sebanyak 80 kali, tetapi harus cepat dengan PS untuk melakukan ini

misalnya hasil.csv?:

NAMA AD_GROUP1 AD_GROUP2 AD_GROUP80 dst. pengguna1 ya tidak ya pengguna2 tidak tidak ya pengguna3 tidak ya tidak echo "UserName`InfraLite" >> results.csv $users = GC .\user_list.csv $group = "InfraLite" $members = Get-ADGroupMember -Identity $group -Recursive |

  • Pilih -ExpandProperty SAMAccountName foreach ($user di $users) ( if ($members -contains $user) ( echo "$user $group`tYes" >> results.csv ) else ( echo "$user`tNo" >> results .csv) )
  • 2 jawaban

    Penyortiran:

0

Aktivitas

Solusi sepele untuk masalah Anda adalah dengan membungkus kode yang ada di loop lain dan membuat file output untuk setiap grup:

$groups = Dapatkan-Konten "C:\groups.txt" foreach ($group dalam $groups) ( $members = Dapatkan-ADGroupMember ... ... )

Pendekatan yang lebih elegan adalah dengan membuat templat pemetaan grup, mengkloningnya untuk setiap pengguna, dan mengisi salinan dengan keanggotaan grup pengguna. Sesuatu seperti ini seharusnya berfungsi:

0

$template = @() Dapatkan-Konten "C:\groups.txt" | ForEach-Object ( $template[$_] = $false ) $groups = @() Dapatkan-ADGroup -Filter * | ForEach-Object ( $groups[$_.DistinguishedName] = $_.Name ) Dapatkan-ADUser -Filter * -Properties MemberOf | ForEach-Object ( $groupmap = $template.Clone() $_.MemberOf | ForEach-Object ( $groups[$_] ) | Where-Object ( $groupmap.ContainsKey($_) ) | ForEach-Object ( $groupmap [$_] = $true ) Objek Baru -Jenis PSObject -Properti $groupmap ) | Ekspor-Csv "C:\user_group_mapping.csv" -NoType

Saya telah bermain-main dengan ini selama beberapa waktu dan saya rasa saya menemukan cara untuk memberikan apa yang Anda cari.

Saya pikir Ansgar berada di jalur yang benar, tetapi saya tidak bisa melakukan apa yang terjadi setelahnya. Dia menyebutkan bahwa pada saat penulisan ini dia tidak memiliki akses ke lingkungan AD.

$UserArray = Dapatkan-Konten "C:\Temp\Users.txt" $GroupArray = Dapatkan-Konten "C:\Temp\Groups.txt" $OutputFile = "C:\Temp\Something.csv" # Menyiapkan tabel hash untuk nanti gunakan $UserHash = New-Object -TypeName System.Collections.Hashtable # Loop luar untuk menambahkan pengguna dan keanggotaan ke UserHash $UserArray | ForEach-Object( $UserInfo = Get-ADUser $_ -Properties MemberOf # Menghapus sintaks LPAP menjadi SAMAccountName grup saja $Memberships = $UserInfo.MemberOf | ForEach-Object( ($_.Split(",")) .replace("CN=","") ) #Menambahkan pasangan User=Membership ke Hash $UserHash.Add($_,$Memberships) ) #Perulangan luar untuk membuat objek per pengguna $Results = $UserArray | ForEach-Object( # Pertama buat objek sederhana $User = New-Object -TypeName PSCustomObject -Property @( Name = $_ ) # Tambahkan anggota ke objek secara dinamis, berdasarkan $GroupArray $GroupArray | ForEach-Object ( #Checking $UserHash untuk melihat apakah grup muncul di daftar keanggotaan pengguna $UserIsMember = $UserHash.($User.Name) -berisi $_ #Menambahkan properti ke objek, dan nilai $User | Add-Member -MemberType NoteProperty -Name $ _ -Value $UserIsMember ) #Mengembalikan objek ke variabel Return $User ) #Mengonversi objek ke CSV, lalu mengeluarkannya $Results |

Semoga semuanya masuk akal. Saya berkomentar sebanyak yang saya bisa. Akan sangat mudah untuk mengonversi ke ADSI jika Anda tidak menginstal RSAT di mesin apa pun yang Anda gunakan untuk menjalankannya. Jika Anda membutuhkannya, beri tahu saya dan saya akan segera melakukan beberapa perubahan.

Selamat siang para pembaca dan pelanggan yang budiman, kami terus belajar bersama Anda Kemampuan Powershell dan Direktori Aktif. Seperti yang Anda ingat, semua akun pengguna dan komputernya berada di database NTDS.dit, semuanya bagus dan terpusat. Ketika sebuah perusahaan memiliki lebih dari satu administrator sistem, situasi mungkin timbul ketika sampah dan kredensial yang tidak diperlukan menumpuk. Kita semua adalah manusia dan kita bisa melupakan beberapa hal, dan pada saat tertentu perhatian kita bisa teralihkan, yang juga akan menyebabkan kita lupa. informasi penting. Dan kami sampai pada kesimpulan bahwa Direktori Actvie tidak terakumulasi pengguna aktif(dipecat atau dilupakan), dalam hal apa pun, administrator sistem yang baik harus mengidentifikasinya, menonaktifkannya, dan kemudian menghapusnya jika diinginkan, itulah yang akan kami lakukan.

Melalui snap-in ADUC

Terakhir kali saya memberi Anda contoh penggunaan snap-in Pengguna dan Komputer Direktori Aktif, yang melaluinya kami mencari komputer yang hilang di jaringan lokal yang tidak muncul selama sebulan. Sekarang kita akan melakukan hal yang sama dengan akun pengguna. Saya memiliki AD di Windows Server 2012 R2, buka ADUC, untuk melakukan ini tekan WIN+R dan masukkan dsa.msc.

Di formulir permintaan yang terbuka, masukkan:

  • Minta nama> bagi saya ini adalah pengguna yang hilang
  • Deskripsi jika perlu
  • Minta root > di sini Anda dapat meninggalkan seluruh domain, atau menentukannya pada OU yang diinginkan

Kemudian klik tombol permintaan.

Pada tab pengguna kita melihat item "Jumlah hari sejak login terakhir dalam sistem" Saya menetapkan 60 hari misalnya.

Hasilnya, Anda akan menerima daftar akun karyawan tidak aktif yang Anda perlukan.

Melalui snap-in PowerShell

Hal yang sama bisa dilakukan melalui Powershell. Saya akan segera memberi Anda kode yang tugasnya mencari pengguna yang tidak aktif; untuk ini saya memilih jangka waktu 45 hari, menonaktifkan data pengguna dan pindah ke OU yang ditunjuk khusus.

$date_with_offset= (Dapatkan-Tanggal).TambahkanHari(-45)
$users = Dapatkan-ADUser -Properti LastLogonDate -Filter (LastLogonDate -lt $date_with_offset ) | Urutkan LastLogonDate
foreach ($pengguna di $pengguna) (set-aduser $user -enabled $false; move-adobject -identity $user -targetpath "ou=Fired,ou=Moscow L. pengguna,ou=Lokasi,dc=msk,dc= contoso,dc=com")
Dapatkan-ADUser -Properti LastLogonDate -Filter (LastLogonDate -lt $date_with_offset ) | Urutkan LastLogonDate | Nama FT, LastLogonDate -Ukuran Otomatis | File Keluar c:\Script\users.txt

  • Di baris pertama Anda mendeklarasikan variabel yang Anda tetapkan istilah pencariannya
  • Buat variabel dan buat pilihan berdasarkan waktu login terakhir
  • Memindahkan pengguna

  • Membuat laporan ke file

Hal-hal yang lebih bermanfaat tentang bekerja dengan pengguna. Sebelum menggunakan perintah di bawah ini, Anda perlu memuat modul Direktori Aktif melalui perintah

Dapatkan-Bantuan Dapatkan-ADUser

Di komentar artikel sebelumnya, kita teringat tentang akuntansi di Excel, bukan 1C. Baiklah, mari kita periksa seberapa banyak Anda mengetahui Excel. Hari ini saya akan menunjukkan cara mendapatkan data dari Direktori Aktif dan bekerja dengannya tanpa makro dan PowerShell - hanya dengan mekanisme Office standar. Misalnya, Anda bisa dengan mudah mendapatkan analitik tentang penggunaan sistem operasi di organisasi Anda jika Anda belum memiliki sesuatu seperti Microsoft SCOM. Ya, atau sekadar pemanasan dan mengalihkan pikiran Anda dari naskah.


Tentu saja, Anda bisa mendapatkan data seperti pada contoh di bawah ini secara harfiah dengan satu baris di PowerShell. Namun, pertama, PowerShell terlalu membosankan, dan kedua, Excel dapat memperbarui data secara dinamis - dokumen yang dihasilkan dapat dipublikasikan secara online dan lupa memperbaruinya.

Untuk bekerja dengan data, saya akan menggunakan mekanisme Power Query. Untuk Office 2010 dan 2013 Anda harus menginstal plugin; Microsoft Office 2016 sudah memiliki modul bawaan ini. Sayangnya, edisi standar tidak cukup bagi kami; kami memerlukan Professional.


Mekanismenya sendiri dirancang untuk menerima dan memproses data dari berbagai sumber - mulai dari ODBC lama dan file teks, hingga Exchange, Oracle, dan Facebook. Lebih detail tentang mekanisme dan bawaannya bahasa skrip"M" sudah ditulis di Habré, tapi saya akan melihat beberapa contoh penggunaan Power Query untuk mendapatkan data dari Active Directory.

Pemanasan: Mari kita lihat kapan pengguna kita login

Permintaan ke database domain itu sendiri dibuat pada tab “Data ― Permintaan baru ― Dari sumber lain ― Dari Direktori Aktif”.



Tentukan sumber data.


Anda harus memilih nama domain dan memberikan informasi koneksi yang diperlukan. Selanjutnya, kita akan memilih jenis objek, dalam contoh ini - pengguna. Di sebelah kanan jendela pratinjau, kueri sudah berjalan, menampilkan pratinjau data.



Kami menyiapkan permintaan dan mengagumi pratinjaunya.


Anda harus mempersiapkan permintaan terlebih dahulu dengan mengklik tombol “edit” dan memilih kolom yang diperlukan. Pada dasarnya, kolom-kolom ini adalah kelas. Masing-masing berisi sekumpulan atribut spesifik dari objek Direktori Aktif, kecuali kolom utama nama tampilan, yang merupakan atribut. Saya akan fokus pada kelas pengguna, orang, atas Dan keamananKepala Sekolah. Sekarang Anda perlu memilih atribut yang diperlukan dari setiap kelas menggunakan "ekstensi" - ikon dengan dua panah di header kolom:

  • Kelas pengguna memperluas dengan memilih stempel waktuLogon terakhir Dan Kontrol Akun pengguna;
  • V orang ayo pilih nomor telepon;
  • V ataskapan Dibuat;
  • dan masuk keamananKepala SekolahNamaAkun Sam.


Kami memperluas permintaan tersebut.


Sekarang mari kita siapkan filternya: khususnya, agar akun tidak diblokir, atribut userAccountControl harus memiliki nilai 512 atau 66048. Filternya mungkin berbeda di lingkungan Anda. Anda dapat membaca selengkapnya tentang atribut dalam dokumentasi Microsoft.



Menerapkan filter.


Terkadang Excel salah mendeteksi format data, terutama nilai atribut lastLogonTimestamp. Jika kemalangan seperti itu tiba-tiba menimpa Anda, Anda dapat mengatur format yang benar pada tab “Konversi”.

Sekarang kolom userAccountControl harus dihapus - tidak diperlukan sama sekali di tampilan. Dan klik "Unduh dan tutup".


Hasilnya adalah sebuah piring yang hanya membutuhkan sedikit sentuhan akhir. Misalnya, ganti nama kolom menjadi sesuatu yang lebih mudah dibaca. Dan sesuaikan pembaruan otomatis data.


Pembaruan otomatis saat membuka tabel atau berdasarkan waktu habis dikonfigurasi di tab "Data" di "Properti".



Menyiapkan pembaruan data.


Setelah pengaturan pembaruan selesai, Anda dapat dengan aman memberikan tabel tersebut ke departemen personalia atau layanan keamanan - beri tahu mereka siapa yang masuk ke sistem dan kapan.


Kode permintaan dalam bahasa “M” ada di bawah spoiler.

biarkan Sumber = ActiveDirectory.Domains("domain.ru"), domain.ru = Sumber()[#"Kategori Objek"], pengguna1 = domain.ru(), #"Kolom Jarak Jauh" = Tabel.RemoveColumns(pengguna1,( "organizationalPerson", "shadowAccount", "posixAccount", "msExchOmaUser", "msExchBaseClass", "msExchIMRecipient", "msExchCertificateInformation", "msExchMultiMediaUser", "msExchMailStorage", "msExchCustomAttributes", "mailRecipient", "distinguishedName")), #"Elemen yang diperluas securityPrincipal" = Table.ExpandRecordColumn(#"Kolom yang dihapus", "securityPrincipal", ("sAMAccountName"), ("sAMAccountName")), #"Elemen yang diperluas atas" = Table.ExpandRecordColumn(#"Elemen yang diperluas securityPrincipal ", "top", ("whenCreated"), ("whenCreated")), #"elemen yang diperluas orang" = Table.ExpandRecordColumn(#"Elemen yang diperluas atas", "orang", ("nomor telepon"), ("nomor telepon") ")), #"Pengguna elemen yang diperluas" = Table.ExpandRecordColumn(#"Elemen yang diperluas orang", "pengguna", ("lastLogonTimestamp", "userAccountControl"), ("lastLogonTimestamp", "userAccountControl")), #"Baris dengan filter diterapkan" = Table.SelectRows(#"Elemen pengguna yang diperluas", masing-masing ( = 512 atau = 66048)), #"Jenis yang diubah" = Table.TransformColumnTypes(#"Baris dengan filter diterapkan",(("lastLogonTimestamp", ketik tanggal waktu))), #"Kolom jarak jauh1" = Tabel.RemoveColumns(#"Jenis yang diubah",("userAccountControl")) di #"Kolom jarak jauh1"

Membuat buku alamat, atau apa yang harus dilakukan jika portal perusahaan tidak bersahabat dengan AD

Pilihan lain menggunakan Excel dalam hubungannya dengan Direktori Aktif - ini adalah pembentukan buku alamat berdasarkan data AD. Hal ini jelas bahwa buku alamat Ini akan relevan hanya jika domainnya sudah beres.


Mari kita membuat permintaan untuk suatu objek pengguna, perluas kelasnya pengguna V surat, dan kelas orang V nomor telepon. Mari kita hapus semua kolom kecuali Nama yang Terbedakan― struktur domain mengulangi struktur perusahaan, begitu pula namanya Unit Organisasi sesuai dengan nama departemen. Demikian pula, grup keamanan dapat digunakan sebagai dasar nama departemen.


Sekarang dari garis CN=Nama Pengguna, OU=Departemen Akuntansi, OU=Divisi, DC=domain, DC=ru Anda perlu mengekstrak nama departemen secara langsung. Cara termudah untuk melakukannya adalah dengan menggunakan pembatas pada tab Transform.



Mengekstrak teks.


Sebagai pembatas yang saya gunakan OU= Dan ,OU=. Pada prinsipnya, koma sudah cukup, tapi saya bermain aman.



Masukkan pembatas.


Sekarang, dengan menggunakan filter, Anda dapat memotong kelebihannya kamu, seperti pengguna yang diblokir dan bawaan, konfigurasikan penyortiran dan muat data ke dalam tabel.



Tampilan tabel ringkasan.

Laporan cepat mengenai komposisi stasiun kerja, tanpa memperkenalkan agen atau persiapan lainnya

Sekarang mari kita coba membuat tabel yang berguna dengan memperoleh data di komputer. Mari kita membuat laporan tentang sistem operasi yang digunakan oleh perusahaan: untuk ini kita akan membuat permintaan, tetapi kali ini di navigator kita akan memilih komputer.



Kami membuat permintaan untuk objek komputer.


Mari kita tinggalkan kelas kolom komputer Dan atas dan memperluasnya:

  • Kelas komputer memperluas dengan memilih cn, sistem operasi, operatingSystemServicePack Dan Versi Sistem Operasi;
  • di kelas atas ayo pilih kapan Dibuat.


Permintaan lanjutan.


Jika diinginkan, Anda dapat membuat laporan hanya pada sistem operasi server. Misalnya, filter berdasarkan atribut operatingSystem atau operatingSystemVersion. Saya tidak akan melakukan ini, tetapi saya akan memperbaiki tampilan waktu pembuatan - saya hanya tertarik pada tahunnya. Untuk melakukan ini, pada tab “Konversi”, pilih kolom yang kita perlukan dan pilih “Tahun” di menu “Tanggal”.



Kami mengekstrak tahun sejak komputer memasuki domain.


Sekarang yang tersisa hanyalah menghapus kolom nama tampilan karena tidak diperlukan dan memuat hasilnya. Datanya sudah siap. Sekarang Anda dapat mengerjakannya seperti pada meja biasa. Pertama, mari buat tabel pivot pada tab "Sisipkan" - " Tabel pivot" Mari setujui pilihan sumber data dan konfigurasikan bidangnya.



Pengaturan bidang tabel pivot.


Sekarang tinggal menyesuaikan desain dengan selera Anda dan mengagumi hasilnya:



Tabel ringkasan untuk komputer di AD.


Jika diinginkan, Anda dapat menambahkan bagan ringkasan, juga di tab “Sisipkan”. Di “Kategori” (atau di “Baris”, sesuai selera) tambahkan sistem operasi, ke data ― cn. Pada tab “Desain”, Anda dapat memilih jenis diagram yang Anda suka; Saya lebih suka diagram lingkaran.



Bagan lingkaran.


Sekarang terlihat jelas bahwa, meskipun pembaruan sedang berlangsung, jumlah workstation dengan Windows XP dan server dengan Windows 2003 cukup besar. Dan ada sesuatu yang harus diperjuangkan.


Kode permintaan ada di bawah spoiler.

biarkan Sumber = ActiveDirectory.Domains("domain.ru"), domain.ru = Sumber()[#"Kategori Objek"], komputer1 = domain.ru(), #"Kolom Jarak Jauh" = Tabel.RemoveColumns(komputer1,( "pengguna", "OrganizationalPerson", "person")), #"Kolom lain yang dihapus" = Table.SelectColumns(#"Kolom jarak jauh",("displayName", "komputer", "atas")), #"Item yang diperluas komputer" = Table.ExpandRecordColumn(#"Kolom jarak jauh lainnya", "komputer", ("cn", "operatingSystem", "operatingSystemServicePack", "operatingSystemVersion"), ("cn", "operatingSystem", "operatingSystemServicePack", " operatingSystemVersion")), #"Elemen atas yang diperluas" = Table.ExpandRecordColumn(#"Elemen komputer yang diperluas", "top", ("whenCreated"), ("whenCreated")), #"Extracted year" = Table.TransformColumns( #"Elemen atas yang diperluas",(("saatDibuat", Tanggal.Tahun))), #"Kolom jarak jauh1" = Tabel.RemoveColumns(#"Tahun yang diekstraksi",("namatampilan")) di #"Kolom jarak jauh1"

Tambahkan tag
  • Sergei Savenkov

    semacam ulasan "pendek"... seolah-olah kami sedang terburu-buru di suatu tempat