Memuat naik senarai pengguna daripada kumpulan iklan. Menggunakan Get-ADUser untuk mendapatkan pelbagai maklumat tentang pengguna domain AD. Minta kod di bawah spoiler

Dalam ulasan pada artikel sebelumnya, kami teringat tentang perakaunan dalam Excel dan bukannya 1C. Baiklah, mari semak sejauh mana anda mengetahui Excel. Hari ini saya akan menunjukkan kepada anda cara mendapatkan data daripada Direktori Aktif dan bekerjasama dengan mereka tanpa makro dan PowerShell - hanya dengan mekanisme Office standard. Contohnya, anda boleh mendapatkan analitis dengan mudah tentang penggunaan sistem pengendalian dalam organisasi anda jika anda belum mempunyai sesuatu seperti Microsoft SCOM. Baiklah, atau sekadar memanaskan badan dan alihkan fikiran anda daripada skrip.


Sudah tentu, anda boleh mendapatkan data seperti dalam contoh di bawah secara literal dengan satu baris dalam PowerShell. Tetapi, pertama, PowerShell terlalu membosankan, dan kedua, Excel boleh mengemas kini data secara dinamik - dokumen yang terhasil boleh diterbitkan dalam talian dan terlupa tentang mengemas kininya.

Untuk bekerja dengan data, saya akan menggunakan mekanisme Power Query. Untuk Office 2010 dan 2013 anda perlu memasang pemalam, dalam Microsoft Office 2016 modul ini sudah terbina dalam. Malangnya, edisi standard tidak mencukupi untuk kami; kami memerlukan Profesional.


Mekanisme itu sendiri direka untuk menerima dan memproses data daripada pelbagai sumber - daripada ODBC lama dan fail teks, kepada Exchange, Oracle dan Facebook. Butiran lanjut tentang mekanisme dan bahasa skrip terbina dalam "M" telah ditulis pada Habré, tetapi saya akan melihat beberapa contoh penggunaan Power Query untuk mendapatkan semula data daripada Active Directory.

Memanaskan badan: Mari lihat apabila pengguna kami log masuk

Permintaan kepada pangkalan data domain itu sendiri dibuat pada "Data - Permintaan baru― Daripada sumber lain ― Daripada Active Directory.”



Nyatakan sumber data.


Anda perlu memilih nama domain dan memberikan maklumat sambungan yang diperlukan. Seterusnya, pilih jenis objek, dalam contoh ini - pengguna. Di sebelah kanan dalam tetingkap pratonton, pertanyaan sudah berjalan, menunjukkan pratonton data.



Kami menyediakan permintaan dan mengagumi pratonton.


Anda harus menyediakan permintaan anda terlebih dahulu dengan mengklik butang "edit" dan memilih lajur yang diperlukan. Pada asasnya, lajur ini ialah kelas. Setiap daripadanya mengandungi set atribut khusus objek Direktori Aktif, kecuali lajur utama nama paparan, yang itu sendiri adalah atribut. Saya akan fokus pada kelas pengguna, orang, atas Dan keselamatanPengetua. Sekarang anda perlu memilih atribut yang diperlukan daripada setiap kelas menggunakan "sambungan" - ikon dengan dua anak panah pada pengepala lajur:

  • Kelas pengguna mengembangkan dengan memilih lastLogonTimestamp Dan userAccountControl;
  • V orang jom pilih nombor telefon;
  • V ataswhenCreated;
  • dan dalam keselamatanPengetuaSamAccountName.


Kami mengembangkan permintaan.


Sekarang mari kita sediakan penapis: khususnya, untuk tidak mendapatkan akaun yang disekat, atribut userAccountControl mesti mempunyai nilai 512 atau 66048. Penapis mungkin berbeza dalam persekitaran anda. Anda boleh membaca lebih lanjut mengenai atribut dalam dokumentasi Microsoft.



Menggunakan penapis.


Kadangkala Excel tersalah mengesan format data, terutamanya nilai atribut lastLogonTimestamp. Jika nasib malang seperti itu tiba-tiba menimpa anda, anda boleh menetapkan format yang betul pada tab "Tukar".

Kini lajur userAccountControl harus dipadamkan - ia tidak diperlukan sama sekali dalam paparan. Dan klik "Muat turun dan tutup".


Hasilnya adalah pinggan yang hanya memerlukan sedikit sentuhan kemasan. Sebagai contoh, namakan semula lajur kepada sesuatu yang lebih mudah dibaca. Dan sesuaikan kemas kini automatik data.


Kemas kini automatik apabila membuka jadual atau dengan tamat masa dikonfigurasikan dalam tab "Data" dalam "Properties".



Menyediakan kemas kini data.


Selepas menyediakan kemas kini selesai, anda boleh memberikan jadual dengan selamat kepada jabatan kakitangan atau perkhidmatan keselamatan - beritahu mereka siapa yang log masuk ke sistem dan bila.


Kod permintaan dalam bahasa "M" berada di bawah spoiler.

biarkan Source = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"Kategori Objek"], user1 = domain.ru(), #"Remote Columns" = Table.RemoveColumns(user1,( "organizationalPerson", "shadowAccount", "posixAccount", "msExchOmaUser", "msExchBaseClass", "msExchIMRecipient", "msExchCertificateInformation", "msExchMultiMediaUser", "msExchMailStorage", "msExchCustomAttributes", "disting") #"Expand element securityPrincipal" = Table.ExpandRecordColumn(#"ExpandRecordColumn(#"Alih Keluar Lajur", "securityPrincipal", ("sAMAccountName"), ("sAMAccountName")), #"Expand Elemen atas" = Table.ExpandRecordColumn(#"Expand element securityPrincipal ", "atas", ("whenCreated"), ("whenCreated")), #"Expand element person" = Table.ExpandRecordColumn(#"Expand element top", "person", ("telephoneNumber"), ("telephoneNumber ")), #"Pengguna elemen dikembangkan" = Table.ExpandRecordColumn(#"Orang elemen dikembangkan", "pengguna", ("lastLogonTimestamp", "userAccountControl"), ("lastLogonTimestamp", "userAccountControl")), #"Rows dengan penapis digunakan" = Jadual.SelectRows(#"Elemen pengguna dikembangkan", setiap satu ( = 512 atau = 66048)), #"Jenis yang diubah" = Jadual.TransformColumnTypes(#"Baris dengan penapis digunakan",(("lastLogonTimestamp", taip datetime))), #"Lajur Jauh1" = Jadual.Alih Keluar Lajur(#"Jenis Berubah",("Kawalan Akaun Pengguna")) dalam #"Lajur Jauh1"

Kami cipta buku alamat, atau apa yang perlu dilakukan apabila portal korporat tidak mesra dengan AD

Satu lagi varian menggunakan Excel bersempena dengan Active Directory - ini ialah pembentukan buku alamat berdasarkan data AD. Adalah jelas bahawa buku alamat akan dikemas kini hanya jika domain itu teratur.


Mari buat permintaan untuk objek pengguna, kembangkan kelas pengguna V mel, dan kelas orang V nombor telefon. Mari padamkan semua lajur kecuali DistinguishedName― struktur domain mengulangi struktur perusahaan, jadi nama Unit Organisasi sesuai dengan nama jabatan. Begitu juga, kumpulan keselamatan boleh digunakan sebagai asas untuk nama jabatan.


Sekarang dari barisan CN=Nama Pengguna, OU=Jabatan Perakaunan, OU=Bahagian, DC=domain, DC=ru anda perlu mengekstrak nama jabatan secara langsung. Cara paling mudah untuk melakukan ini ialah menggunakan pembatas pada tab Transform.



Mengekstrak teks.


Sebagai pembatas yang saya gunakan OU= Dan ,OU=. Pada dasarnya, koma sudah memadai, tetapi saya bermain selamat.



Masukkan pembatas.


Sekarang menggunakan penapis anda boleh memotong yang tidak perlu OU, seperti pengguna yang disekat dan terbina, konfigurasikan pengisihan dan muatkan data ke dalam jadual.



Pandangan jadual ringkasan.

Laporan pantas tentang komposisi stesen kerja, tanpa memperkenalkan agen atau penyediaan lain

Sekarang mari cuba buat jadual yang berguna dengan mendapatkan data pada komputer. Mari buat laporan mengenai sistem pengendalian yang digunakan oleh syarikat: untuk ini kami akan membuat permintaan, tetapi kali ini dalam navigator kami akan memilih komputer.



Kami membuat permintaan untuk objek komputer.


Mari tinggalkan kelas lajur komputer Dan atas dan mengembangkannya:

  • Kelas komputer mengembangkan dengan memilih cn, sistem operasi, operatingSystemServicePack Dan operatingSystemVersion;
  • di dalam kelas atas jom pilih whenCreated.


Permintaan lanjutan.


Jika mahu, anda boleh membuat laporan hanya pada sistem pengendalian pelayan. Contohnya, tapis mengikut operatingSystem atau operatingSystemVersion atribut. Saya tidak akan melakukan ini, tetapi saya akan membetulkan paparan masa penciptaan - Saya hanya berminat pada tahun itu. Untuk melakukan ini, pada tab "Penukaran", pilih lajur yang kami perlukan dan pilih "Tahun" dalam menu "Tarikh".



Kami mengekstrak tahun dari masa komputer memasuki domain.


Sekarang yang tinggal hanyalah memadamkan lajur nama paparan sebagai tidak perlu dan memuatkan hasilnya. Data sudah siap. Kini anda boleh bekerja dengan mereka seperti dengan meja biasa. Mula-mula, mari buat jadual pangsi pada tab "Sisipkan" - " Jadual pangsi" Mari kita bersetuju dengan pilihan sumber data dan mengkonfigurasi medannya.



Tetapan medan jadual pangsi.


Kini yang tinggal hanyalah menyesuaikan reka bentuk mengikut citarasa anda dan mengagumi hasilnya:



Jadual ringkasan untuk komputer dalam AD.


Jika mahu, anda boleh menambah jadual ringkasan, juga pada tab Sisip. Dalam "Kategori" (atau dalam "Baris", secukup rasa) tambah sistem operasi, kepada data ― cn. Pada tab "Reka Bentuk", anda boleh memilih jenis carta yang anda suka; Saya lebih suka carta pai.



Carta pai.


Kini jelas kelihatan bahawa, walaupun kemas kini berterusan, jumlah stesen kerja dengan Windows XP dan pelayan dengan Windows 2003 adalah agak besar. Dan ada sesuatu yang perlu diusahakan.


Kod permintaan berada di bawah spoiler.

biarkan Source = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"Kategori Objek"], computer1 = domain.ru(), #"Remote Columns" = Table.RemoveColumns(computer1,( "pengguna", "Orang organisasi", "orang")), #"Lajur lain yang dialih keluar" = Table.SelectColumns(#"Lajur terpencil",("displayName", "komputer", "atas")), #"Kembangkan item komputer" = Jadual.ExpandRecordColumn(#"Lajur jauh lain", "komputer", ("cn", "operatingSystem", "operatingSystemServicePack", "operatingSystemVersion"), ("cn", "operatingSystem", "operatingSystemServicePack", " operatingSystemVersion")), #"Extended top" = Table.ExpandRecordColumn(#"ExpandRecordColumn", "top", ("whenCreated"), ("whenCreated")), #"Extracted year" = Table.TransformColumns( #" Bahagian atas elemen dikembangkan",(("whenCreated", Date.Year))), #"RemoveColumns1" = Table.RemoveColumns(#"Extracted Year",("displayName")) dalam #"RemoveColumns1"

Tambah tag

Bukan rahsia lagi bahawa sejak versi pertama PowerShell, Microsoft telah cuba menjadikannya alat utama Pentadbiran Windows. Dan dalam banyak cara ia berjaya! Hari ini pada contoh mudah, kami akan menunjukkan kepada anda ciri PowerShell yang boleh anda gunakan untuk mendapatkannya pelbagai maklumat tentang pengguna Active Directory dan atribut mereka.

Catatan. Sebelum ini, anda perlu menggunakan AD untuk mendapatkan maklumat tentang atribut akaun pengguna AD. pelbagai instrumen: Konsol ADUC (termasuk), utiliti, dsb. Pilihan alat biasanya berdasarkan tugas di tangan dan kebolehan pengaturcaraan pentadbir.

PowerShell 2.0 memperkenalkan modul khas untuk bekerja dengan Active Directory - (dibentangkan dalam Pelayan Windows 2008 R2), yang cmdletnya membolehkan anda melakukan pelbagai manipulasi dengan objek direktori AD. Untuk mendapatkan maklumat tentang pengguna domain Aktif Direktori dan sifatnya cmdlet Dapatkan-ADUser. Anda boleh menggunakan cmdlet Get-ADUser untuk mendapatkan nilai sebarang atribut akaun pengguna sedia ada dalam AD. Selain itu, anda boleh menentukan pelbagai kriteria pemilihan dan menjana senarai pengguna domain dan atribut mereka.

Dalam contoh ini, kami akan menunjukkan kepada anda cara menggunakan cmdlet PowerShell Get-ADUser untuk mendapatkan semula maklumat tentang bila kali terakhir kata laluan pengguna ditukar dan bila ia tamat tempoh.

Lancarkan tetingkap Powershll dengan hak pentadbir dan import modul Active Directory dengan arahan:

Import-Modul Activedirectory

Nasihat. Dalam Windows Server 2012 dan lebih tinggi, anda boleh melangkau item ini kerana Modul PowerShell Direktori Aktif disambungkan secara lalai.

Dalam sistem pengendalian pelanggan (contohnya Windows 10), untuk komander Get-AdUser berfungsi, anda perlu memasang versi RSAT yang sesuai dan mendayakan komponen dalam panel kawalan Modul Direktori Aktif untuk Windows PowerShell(Alat Pentadbiran Pelayan Jauh -> Alat Pentadbiran Peranan -> Alat AD DS dan AD LDS -> Alat AD DS).

Senarai lengkap semua argumen cmdlet Get-ADUser boleh diperolehi seperti berikut:

Bantu Dapatkan-ADUser

Untuk memaparkan senarai semua akaun domain, jalankan arahan:

Dapatkan-ADUser -penapis *

Format senarai yang dikembalikan tidak begitu mudah digunakan, hanya beberapa asas 10 daripada lebih 120 atribut dan sifat akaun pengguna dipaparkan (DN, SamAccountName, Nama, UPN, dll.) sebagai tambahan, kami melihat bahawa terdapat tiada maklumat tentang masa pertukaran kata laluan terakhir.

Untuk menarik diri penuh dengan maklumat tentang semua atribut yang tersedia bagi pengguna tuser, jalankan arahan:

Dapatkan-ADUser -identity tuser -properties *

Jadi kita lihat senarai penuh Atribut pengguna AD dan nilainya dikaitkan dengan akaun pengguna. Seterusnya, kami akan meneruskan untuk memformat output cmdlet Get-ADUser supaya medan yang kami perlukan dipaparkan. Kami berminat dengan atribut:

  • Kata Laluan Tamat Tempoh
  • PasswordLastSet
  • Kata LaluanTidak Pernah Tamat

Mari jalankan arahan:

Get-ADUser tuser -properties Kata LaluanLuput, PasswordLastSet, Kata LaluanNeverExpires

Kini data pengguna mengandungi maklumat tentang tarikh pertukaran kata laluan dan masa ia akan tamat tempoh. Mari kita membentangkan maklumat dalam bentuk jadual yang lebih mudah:

Get-ADUser -filter * -properties Kata laluan Tamat Tempoh, PasswordLastSet, Kata LaluanNeverExpires | ft Nama, Kata LaluanLuput, Kata LaluanSet Terakhir, Kata Laluan Tidak Pernah Tamat

Untuk memaparkan data pengguna daripada OU tertentu, gunakan parameter SearchBase:

Get-ADUser -SearchBase 'OU=Moscow,DC=winitpro,DC=loc' -penapis * -properties Kata LaluanLuput, Kata LaluanSet Terakhir, Kata LaluanTidak Pernah Tamat Tempoh | ft Nama, Kata LaluanLuput, Kata LaluanSet Terakhir, Kata Laluan Tidak Pernah Tamat

Hasil arahan boleh dieksport ke fail teks:

Get-ADUser -filter * -properties Kata laluan Tamat Tempoh, PasswordLastSet, Kata LaluanNeverExpires | ft Nama, Kata LaluanLuput, PasswordLastSet, PasswordNeverExpires > C:\temp\users.txt

Atau dalam CSV, yang akan dieksport dengan mudah ke Excel pada masa hadapan (selain itu menggunakan jenis-objek Mari mengisih jadual mengikut lajur PasswordLastSet, dan juga menambah syarat di mana– nama pengguna mesti mengandungi rentetan “Dmitry”):

Get-ADUser -filter * -properties Kata laluan Tamat Tempoh, PasswordLastSet, Kata LaluanNeverExpires | di mana ($_.nama –seperti “*Dmitry*”) | sort-object PasswordLastSet | pilih-objek Nama, Kata LaluanLuput, PasswordLastSet, PasswordNeverExpires | Export-csv -path c:\temp\user-password-expires-2015.csv

Oleh itu, anda boleh membina jadual dengan sebarang atribut yang diperlukan Pengguna aktif Direktori.

Untuk mendapatkan senarai akaun pengguna AD berdasarkan ciri khusus, gunakan parameter –Filter. Sebagai argumen kepada parameter ini, anda boleh menentukan nilai atribut pengguna Active Directory tertentu, yang akan menyebabkan cmdlet Get-ADUser digunakan kepada pengguna yang sepadan dengan kriteria penapis.

Output pengguna AD yang namanya bermula dengan Roman:

Get-ADUser -filter (nama -seperti "Roman*")

Get-ADUser -Filter (SamAccountName -seperti "*") | Ukur-Objek

Senarai semua akaun aktif (tidak disekat) dalam AD:

Get-ADUser -Filter (Didayakan -eq "True") | Select-Object SamAccountName,Nama,Nama Keluarga,Nama Diberi | Format-Jadual

Senarai akaun dengan kata laluan tamat tempoh:

Get-ADUser -filter (Enabled -eq $True) -properties passwordLuput | di mana($_.Kata LaluanLuput)

Senarai akaun aktif dengan alamat e-mel:

Get-ADUser -Filter ((mail -ne "null") -and (Enabled -eq "true")) -Properties Nama Keluarga,GivenName,mel | Nama Objek Pilih, Nama Keluarga, Nama Diberi, mel | Format-Jadual

Tugas: Untuk senarai akaun yang disimpan dalam fail teks(satu akaun setiap baris) anda perlu mendapatkan nombor telefon pengguna dalam AD dan memuat naik maklumat ke fail csv teks (boleh diimport dengan mudah ke Esxel).

Import-Csv c:\ps\usernsme_list.csv | ForEach ( Get-ADUser -identity $_.user -Properties Name, telefonNombor | Pilih Nama, Nombor telefon | Export-CSV c:\ps\export_ad_list.csv -Tambah -Pengekodan UTF8 )

Contoh berikut membolehkan anda memuat naik buku alamat syarikat ke format csv fail yang kemudiannya boleh diimport ke dalam Outlook atau Mozilla Thunderbird:

Get-ADUser -Filter ((mail -ne "null") -and (Enabled -eq "true")) -Properties Nama Keluarga,GivenName,mel | Nama Objek Pilih, Nama Keluarga, Nama Diberi, mel | Eksport-Csv -NoTypeInformation -Pengekodan utf8 -pembatas "," $env:temp\mail_list.csv

Pengguna yang tidak menukar kata laluan mereka dalam tempoh 90 hari yang lalu:

$90_Hari = (Get-Date).adddays(-90) Get-ADUser -filter ((passwordlastset -le $90_days))

$user = Get-ADUser winadmin -Properties thumbnailPhoto $user.thumbnailPhoto | Set-Content winadmin.jpg -Pengekodan bait

Senarai kumpulan di mana dia berada Akaun pengguna

Get-AdUser winadmin -Properties memberof | Pilih ahli daripada -kembangkan harta ahli

Hari ini kami akan cuba memuat naik senarai semua pengguna ke fail berasingan daripada Active Directory. Pembantu utama kami dalam perkara ini ialah PowerShell. Masalahnya ialah Microsoft pada asalnya merancang konsol arahan PowerShell sebagai alat utama untuk pengurusan pelayan Komponen Windows. Dan hari ini, apabila kita sudah mempunyai versi 2.0, secara amnya, ini berlaku.

Malah pada masa lalu baru-baru ini, untuk berinteraksi dengan AD, pentadbir perlu mempunyai sama ada utiliti dsquery atau pelbagai jenis skrip atau utiliti. Bermula hari ini Versi Windows Pelayan 2008 R2, kami boleh bekerja dengan AD melalui PowerShell. Dengan kemunculan PowerShell 2.0, modul khas digunakan untuk berinteraksi dengan Active Directory Modul Active Directory untuk Windows PowerShell , yang mengandungi senarai cmdlet yang diperlukan. Untuk tugasan kami, kami akan menggunakan arahan Dapatkan-ADUser.

Jadi, bergantung pada mana yang terkawal sistem operasi kami akan melancarkan Konsol PowerShell, kita perlu melakukan "langkah persediaan".

1) Jika kita bekerja di bawah Pelayan Windows sehingga versi 2012, maka kita perlu menjalankan arahan:

  • Import-Modul Activedirectory – arahan untuk mengimport modul ke dalam AD

Untuk versi sistem pengendalian dari 2012 dan lebih tinggi, modul ini telah didayakan secara lalai.

2) Jika kita bekerja dari bawah mana-mana Windows pelanggan, maka pakej mesti dipasang padanya pentadbiran jauh RSAT, dengan Modul Active Directory untuk komponen Windows PowerShell dipasang.

Perlu diingat bahawa cmdlet Get-ADUser disyorkan untuk dilaksanakan apabila jumlah data yang dimuat naik adalah sehingga 1000 pengguna.

Mengeksport pengguna AD menggunakan PowerShell ke fail berasingan

Mula-mula, mari kita hubungi bantuan untuk arahan Get-ADUser. Akibatnya, anda akan mendapat segala-galanya perintah yang diperlukan untuk pentadbiran selanjutnya.

  • bantu Get-ADUser – perintah untuk memanggil bantuan

Untuk masuk ke tingkap Senarai PowerShell semua pengguna dengan semua sifat, anda perlu menjalankan arahan berikut:

  • Dapatkan-ADUser -penapis * – eksport senarai pengguna AD

Muat naik ini tidak sepenuhnya bermaklumat dan tidak sesuai dengan semua maklumat yang diperlukan dalam tetingkap. Oleh itu, mari kita cuba mengecilkan carian dan memaparkan sifat pengguna tertentu dengan nama pengguna1:

  • Get-ADUser -identity user1 -properties * – eksport sifat pengguna tertentu

Sekarang mari cuba mengeksport senarai semua pengguna dengan sifat mereka ke luaran txt atau csv fail:

  • Get-ADUser -filter * -properties * | Export-csv -path c:\users.csv -encoding Unicode – eksport pengguna ke fail berasingan

Saya ingin memberi perhatian khusus kepada kunci -pengekodan Unicode. Ia berfungsi untuk memastikan bahawa abjad Cyrillic Rusia, selepas eksport dari AD, boleh dipaparkan dengan betul dalam fail yang dimuat naik. Contohnya, melalui Microsoft Excel Kita akan lihat tanda soal bukannya surat Rusia.

Apabila melihat fail, data dieksport dalam satu baris dan oleh itu tidak boleh dibaca. Untuk mengubahnya kita perlu melakukan perkara berikut: