İstifadəçilərin böyük bir siyahısının üzvü olduğu seçilmiş AD qruplarının siyahısını necə əldə etmək olar? AD konteynerlərindən məlumatların yüklənməsi

Günortanız xeyir, əziz oxucular və abunəçilər, biz Powershell və Active Directory imkanlarını öyrənməyə davam edirik. Xatırladığınız kimi, onun bütün istifadəçi və kompüter hesabları NTDS.dit verilənlər bazasında yerləşir, hər şey əla və mərkəzləşdirilmişdir. Bir şirkətdə birdən çox sistem administratoru olduqda, zibil və lazımsız etimadnamələrin yığıldığı bir vəziyyət yarana bilər. Hamımız insanıq və bəzi şeyləri unuda bilərik, bəzi məqamlarda diqqətimizi yayındıra bilərik ki, bu da vacib məlumatların unudulmasına səbəb olacaq. Və belə bir nəticəyə gəlirik ki, aktiv olmayan istifadəçilər (qovulmuş və ya unudulmuş) Actvie Directory-də toplanır, hər halda yaxşı bir sistem administratoru onları müəyyən etməli, onları söndürməli və istəsə, silməlidir, biz bunu edəcəyik.

ADUC snap-in vasitəsilə

Keçən dəfə mən artıq sizə Active Directory İstifadəçiləri və Kompüterlər snap-in-dən istifadə nümunəsini verdim, bunun vasitəsilə yerli şəbəkədə bir ay ərzində görünməyən itkin kompüterləri axtardıq. İndi eyni şeyi istifadəçi hesabları ilə edəcəyik. Mənim Windows Server 2012 R2-də AD var, ADUC-u açın, bunun üçün WIN+R düyməsini basın və dsa.msc daxil edin.

Açılan sorğu formasında aşağıdakıları daxil edin:

  • Sorğu adı > mənim üçün bunlar itirilmiş istifadəçilərdir
  • Lazım gələrsə təsvir
  • Sorğu kök > burada bütün domeni tərk edə və ya onu istədiyiniz OU-da göstərə bilərsiniz

Sonra sorğu düyməsini basın.

İstifadəçilər sekmesinde "Son girişdən bəri günlərin sayı" maddəsini görürük, məsələn, mən onu 60 günə təyin edirəm;

Nəticədə, qeyri-aktiv işçi hesablarının sizə lazım olan siyahısını alacaqsınız.

Powershell snap-in vasitəsilə

Eyni şey Powershell vasitəsilə edilə bilər. Mən sizə dərhal kodu verəcəyəm, onun vəzifəsi qeyri-aktiv istifadəçiləri axtarmaqdır;

$date_with_offset= (Get-Date).AddDays(-45)
$users = Get-ADUser -Xassələr LastLogonDate -Filter (LastLogonDate -lt $date_with_offset ) | LastLogonDate-i çeşidləyin
foreach ($users in $user) (set-aduser $user -enabled $false; move-adobject -identity $user -targetpath "ou=Fired,ou=Moscow L. users,ou=Location,dc=msk,dc= contoso,dc=com")
Get-ADUser -Xassələr LastLogonDate -Filter (LastLogonDate -lt $date_with_offset ) | LastLogonDate | Sırala FT Adı, LastLogonDate -AutoSize | Out-Fayl c:\Script\users.txt

  • Birinci sətirdə axtarış terminini təyin etdiyiniz dəyişəni elan edirsiniz
  • Dəyişən yaradın və son giriş vaxtı əsasında seçim edin
  • Köçürülən istifadəçilər

  • Fayla hesabat hazırlamaq

İstifadəçi ilə işləmək haqqında daha faydalı şeylər. Aşağıdakı əmrlərdən istifadə etməzdən əvvəl əmr vasitəsilə Active Directory modulunu yükləməlisiniz

Get-Help Get-ADUser

Bütün istifadəçiləri MS Active Directory-dən (ITGC) boşaltmaq üçün skriptlər

İvan Piskunov

Standart audit prosedurlarından biri ITGC kataloq üçün Active Directory bütün domen istifadəçilərinin endirilməsini əldə etməkdir. Əldə edilmiş məlumatlara əsasən, test prosedurları, məsələn, inzibatçıların siyahısını öyrənmək və ya vaxtı keçmiş parolu olan istifadəçiləri müəyyən etmək üçün formalaşdırılır. Belə bir yükləmə yaratmağın ən təsirli yolu standart interfeysdən istifadə etmək olardı PowerShell , bu məqalədə nəzərdən keçirəcəyimiz nümunələr

1. PowerShell skripti ilə sürətli yükləmə

Aşağıda Excel-də heç bir problem olmadan açıla bilən CSV formatında bütün AD domen istifadəçilərinin siyahısını əldə etməyin ən sadə və sürətli yollarından biri kimi PowerShell skriptidir.

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = "LDAP://ou=Users,ou=Departmets,dc=test,dc=ru" $objSearcher.Filter = "(&(objectCategory=person) (!userAccountControl:1.2.840.113556.1.4.803:=2))" $users = $objSearcher.FindAll() # Hesabların sayı $users.Count $users | ForEach-Object ( $user = $_.Properties Yeni-Obyekt PsObject -Property @( Vəzifə = $user.description Departamenti = $user.department Giriş = $user.userprincipalname Telefon = $user.telephonenumber Otaq = $user.physicaldeliveryofficename Tam ad = $user.cn ) ) | Export-Csv -NoClobber -Encoding utf8 -Path C: list_domain_users.csv

Skriptin sisteminizdə işləməsi üçün onu bir az düzəltməlisiniz, yəni lazımi parametrləri daxil etməlisiniz, yəni. bu nümunədə olduğu kimi bunlar parametrlərdir İstifadəçilər şöbəsində şöbələri domenində Test.ru. Həm də faylın saxlandığı yolu göstərin list_domain_users.csv

Boşaldıqdan sonra dərhal açsanız list_domain_users.csv , oxunmaz görünəcək, lakin standart vasitələrdən istifadə edərək onu asanlıqla lazım olan formata gətirə bilərik. Excel-də açın list_domain_users.csv , birinci sütunu seçin, sonra “Məlumat” sekmesine keçin və “Sütunlar üzrə mətn” üzərinə klikləyin. "Ayrılmış" seçin və "Növbəti" düyməsini basın. Hazır!

!Qeyd etmək lazımdır ki, bu skript 1000-dən çox istifadəçini göstərməyəcək. Kiçik bir şirkət üçün olduqca uyğundur, lakin domenində çox sayda istifadəçisi olanlar üçün aşağıda təsvir olunan üsullara müraciət etməlidirlər.

2. Active Directory istifadəçi yükləmələrini əldə etmək üçün təkmil PowerShell cmdlet

Windows PowerShell aləti üçün Active Directory Module (Windows Server 2008 R2 və daha yüksək versiyalarda təqdim edilmişdir) sizə AD kataloq obyektləri ilə müxtəlif manipulyasiyalar həyata keçirən cmdletlər yaratmağa imkan verir. Cmdlet istifadəçilər və onların xüsusiyyətləri haqqında məlumat əldə etmək üçün istifadə olunur Get-ADUser.

Başlamaq Powershell pəncərəsini işə salın administrator hüquqları ilə və sonrakı fəaliyyət üçün Active Directory modulunu idxal edin:
Import-Module aktiv kataloqu

Kimə bütün domen hesablarını sadalayın Komandanı icra edək:

Get-ADUser -filtr *

Kimə bütün mövcud atributlar haqqında tam məlumatı göstərin istifadəçi tuser, əmri işə salın

Get-ADUser -identity tuser -xassələr *


Məsələn, haqqında məlumat bizi maraqlandırır parolun dəyişdirilmə tarixi və müddəti bitdiyi vaxt . Komandanın nəticəsi mətn faylına ixrac edilə bilər:

Get-ADUser -filtr * -xassələr Parolun Bitməsi, ParolunSon Dəstinin, ŞifrəNeverExpires | ft Adı, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C:tempusers.txt

Və ya dərhal CSV-yə yükləyin , gələcəkdə Excel-ə ixrac etmək rahat olacaq (əlavə olaraq, sort-obyektindən istifadə edərək cədvəli PasswordLastSet sütunu ilə çeşidləyəcəyik, həmçinin harada şərti əlavə edəcəyik - istifadəçi adında "Dmitri" sətri olmalıdır)

Get-ADUser -filtr * -xassələr Parolun Bitməsi, ParolunSon Dəstinin, ŞifrəNeverExpires | harada ($_.name –“*Dmitri*” kimi) | sort-object PasswordLastSet | select-obyekt Adı, Parolun Bitməsi, ParolunSon Dəstinin, ParolNeverExpires | Export-csv -path c:tempuser-password-expires-2015.csv

Əvvəlki məqaləyə şərhlərdə 1C əvəzinə Excel-də mühasibat uçotunu xatırladıq. Yaxşı, Excel-i nə qədər bildiyinizi yoxlayaq. Bu gün sizə Active Directory-dən məlumat əldə etməyi və onunla makro və PowerShell olmadan - yalnız standart Office mexanizmləri ilə işləməyi göstərəcəyəm. Məsələn, Microsoft SCOM kimi bir şeyiniz yoxdursa, təşkilatınızda əməliyyat sistemlərinin istifadəsi ilə bağlı analitikləri asanlıqla əldə edə bilərsiniz. Yaxşı, ya da sadəcə istiləşin və fikrinizi ssenarilərdən uzaqlaşdırın.


Əlbəttə ki, PowerShell-də bir sətirlə aşağıdakı nümunələrdə olduğu kimi məlumatları əldə edə bilərsiniz. Lakin, birincisi, PowerShell çox darıxdırıcıdır, ikincisi, Excel məlumatları dinamik olaraq yeniləyə bilər - nəticədə əldə edilən sənədlər onlayn yayımlana bilər və onları yeniləmək unudula bilər.

Məlumatlarla işləmək üçün Power Query mexanizmindən istifadə edəcəyəm. Office 2010 və 2013 üçün bir plagin quraşdırmalı olacaqsınız Microsoft Office 2016-da artıq bu modul quraşdırılmışdır. Təəssüf ki, standart nəşr bizim üçün kifayət deyil;


Mexanizm özü müxtəlif mənbələrdən - köhnə ODBC və mətn fayllarından Exchange, Oracle və Facebook-a qədər məlumatları qəbul etmək və emal etmək üçün nəzərdə tutulub. Mexanizm və daxili skript dili “M” haqqında daha çox təfərrüat artıq Habré-də yazılmışdır, lakin mən Active Directory-dən məlumat əldə etmək üçün Power Query-dən istifadənin bir neçə nümunəsinə baxacağam.

İstiləşmə: Baxaq, istifadəçilərimiz nə vaxt daxil olublar

Domen verilənlər bazasına sorğunun özü “Məlumat ― Yeni sorğu ― Digər mənbələrdən ― Active Directory-dən” sekmesinde yaradılır.



Məlumat mənbəyini göstərin.


Siz domen adını seçməli və lazımi əlaqə məlumatını təqdim etməlisiniz. Sonra, bu nümunədə obyektlərin növünü seçin - istifadəçi. Önizləmə pəncərəsinin sağ tərəfində sorğu artıq işləyir və məlumatların ön görünüşünü göstərir.



Biz sorğu hazırlayırıq və baxışa heyran oluruq.


Siz “redaktə” düyməsini sıxaraq və tələb olunan sütunları seçməklə sorğunu əvvəlcədən hazırlamalısınız. Əsasən, bu sütunlar siniflərdir, onların hər biri əsas sütun istisna olmaqla, Active Directory obyektinin xüsusi atributlarını ehtiva edir ekran adı, özü də bir atributdur. Mən dərslərə diqqət yetirəcəyəm istifadəçi, şəxs, üsttəhlükəsizlik prinsipi. İndi "uzatma" - sütun başlığında iki ox olan bir işarədən istifadə edərək hər sinifdən lazımi atributları seçməlisiniz:

  • Sinif istifadəçi seçərək genişləndirin lastLogonTimestampuserAccountControl;
  • V şəxs seçək telefon nömrəsi;
  • V üstyaradıldıqda;
  • və içində təhlükəsizlik prinsipiSamAccountName.


Müraciəti genişləndiririk.


İndi filtri quraşdıraq: xüsusən, bloklanmış hesabları əldə etməmək üçün userAccountControl atributunun dəyəri 512 və ya 66048 olmalıdır. Filtr sizin mühitinizdə fərqli ola bilər. Atribut haqqında daha çox Microsoft sənədlərində oxuya bilərsiniz.



Filtr tətbiqi.


Bəzən Excel məlumat formatını, xüsusən də lastLogonTimestamp atributunun dəyərini səhv aşkarlayır. Birdən belə bir bədbəxtlik başınıza gəlsə, "Dönüştür" sekmesinde düzgün formatı təyin edə bilərsiniz.

İndi userAccountControl sütunu silinməlidir - ekranda ümumiyyətlə lazım deyil. Və "Yükləyin və bağlayın" düyməsini basın.


Nəticə bir az son toxunuşa ehtiyacı olan bir boşqabdır. Məsələn, sütunları daha oxunaqlı adlandırın. Və avtomatik məlumat yeniləməsini qurun.


Cədvəl açarkən və ya fasilə ilə avtomatik yeniləmə "Xüsusiyyətlər"dəki "Məlumat" sekmesinde konfiqurasiya edilir.



Məlumat yeniləməsinin qurulması.


Yeniləmənin qurulması başa çatdıqdan sonra cədvəli kadrlar şöbəsinə və ya təhlükəsizlik xidmətinə təhlükəsiz şəkildə verə bilərsiniz - sistemə kimin və nə vaxt daxil olduğunu bildirin.


“M” dilində sorğu kodu spoylerin altındadır.

qoy Mənbə = ActiveDirectory.Domains("domain.ru"), domain.ru = Mənbə()[#"Obyekt Kateqoriyaları"], user1 = domain.ru(), #"Uzaq Sütunlar" = Cədvəl.RemoveColumns(istifadəçi1,() "organizationalPerson", "shadowAccount", "posixAccount", "msExchOmaUser", "msExchBaseClass", "msExchIMRecipient", "msExchCertificateInformation", "msExchMultiMediaUser", "msExchMailStorage", "msExchCustom"MailStorage", "msExchCustom"Reklam"), #"Expanded element securityPrincipal" = Table.ExpandRecordColumn(#"Silinmiş sütunlar", "securityPrincipal", ("sAMAccountName"), ("sAMAccountName")), #"Expanded element top" = Table.ExpandRecordColumn(#"Genişlənmiş element securityPrincipal ", "top", ("whenCreated"), ("whenCreated")), #"Genişləndirilmiş element şəxs" = Cədvəl.ExpandRecordColumn(#"Genişləndirilmiş element üst", "şəxs", ("telefonNumber"), ("telephoneNumber ")), #"Genişləndirilmiş element istifadəçisi" = Cədvəl.ExpandRecordColumn(#"Genişləndirilmiş element şəxs", "istifadəçi", ("lastLogonTimestamp", "userAccountControl"), ("lastLogonTimestamp", "userAccountControl")), #"Satırlar filtr tətbiq edilmiş" = Cədvəl.SelectRows(#"Genişləndirilmiş istifadəçi elementi", hər biri ( = 512 və ya = 66048)), #"Dəyişdirilmiş növ" = Cədvəl.TransformColumnTypes(#"Filtr tətbiq olunan sıralar",(("lastLogonTimestamp", datetime yazın))), #"Uzaq sütunlar1" = Cədvəl.RemoveColumns(#"Dəyişdirilmiş növ",("userAccountControl")) #"Uzaqdan çıxarılan sütunlar1"

Ünvan kitabının yaradılması və ya korporativ portal AD ilə dost olmadıqda nə etməli

Excel-dən Active Directory ilə birlikdə istifadə etmək üçün başqa bir seçim AD məlumatlarına əsaslanan ünvan kitabçası yaratmaqdır. Ünvan kitabının yalnız domen qaydasında olduğu halda yenilənəcəyi aydındır.


Gəlin obyekt üçün sorğu yaradaq istifadəçi, sinfi genişləndirin istifadəçi V poçt, və sinif şəxs V telefon nömrəsi. istisna olmaqla, bütün sütunları silək seçilən Adı― domen strukturu müəssisənin strukturunu təkrarlayır, ona görə də adlar Təşkilat bölmələrişöbələrin adlarına uyğun gəlir. Eynilə, təhlükəsizlik qrupları şöbə adları üçün əsas kimi istifadə edilə bilər.


İndi xəttdən CN=İstifadəçi adı, OU=Mühasibatlıq Departamenti, OU=Bölmələr, DC=domen, DC=ru birbaşa şöbənin adını çıxarmaq lazımdır. Bunu etmənin ən asan yolu Transform sekmesindəki ayırıcılardan istifadə etməkdir.



Mətnin çıxarılması.


Ayırıcı kimi istifadə edirəm OU=,OU=. Prinsipcə, vergül kifayətdir, amma mən onu təhlükəsiz oynayıram.



Ayırıcıları daxil edin.


İndi filtrdən istifadə edərək lazımsızları kəsə bilərsiniz OU, bloklanmış istifadəçilər kimi və qurulmuşdur, çeşidləməni konfiqurasiya edin və məlumatları cədvələ yükləyin.



Xülasə cədvəlinin görünüşü.

Agentləri və ya digər hazırlıqları təqdim etmədən iş stansiyalarının tərkibi haqqında sürətli hesabat

İndi isə kompüterlərdə verilənləri əldə etməklə faydalı cədvəl yaratmağa çalışaq. Şirkətin istifadə etdiyi əməliyyat sistemləri haqqında hesabat hazırlayaq: bunun üçün sorğu yaradacağıq, lakin bu dəfə naviqatorda biz seçəcəyik kompüter.



Biz kompüter obyekti üçün sorğu edirik.


Sütun dərslərini buraxaq kompüterüst və onları genişləndirin:

  • Sinif kompüter seçərək genişləndirin cn, əməliyyat sistemi, əməliyyat sistemiServicePackəməliyyat sistemi versiyası;
  • sinifdə üst seçək yaradıldıqda.


Qabaqcıl sorğu.


İstəsəniz, yalnız server əməliyyat sistemləri haqqında hesabat verə bilərsiniz. Məsələn, əməliyyat Sistemi və ya OperationSystemVersion atributuna görə süzün. Mən bunu etməyəcəyəm, amma yaradılış vaxtının göstərilməsini düzəldəcəm - məni yalnız il maraqlandırır. Bunu etmək üçün "Dönüşüm" sekmesinde bizə lazım olan sütunu seçin və "Tarix" menyusunda "İl" seçin.



Kompüterin domenə daxil olduğu vaxtdan ili çıxarırıq.


İndi qalan yalnız ekran adı sütununu lazımsız olaraq silmək və nəticəni yükləməkdir. Məlumat hazırdır. İndi onlarla adi bir masa ilə işləyə bilərsiniz. Əvvəlcə "Insert" - "Pivot Table" sekmesinde pivot cədvəli yaradaq. Məlumat mənbəyinin seçiminə razılaşaq və onun sahələrini konfiqurasiya edək.



Pivot cədvəl sahəsinin parametrləri.


İndi qalan şey dizaynı zövqünüzə uyğunlaşdırmaq və nəticəyə heyran olmaqdır:



AD-də kompüterlər üçün xülasə cədvəli.


İstəyirsinizsə, Daxil et tabında xülasə diaqramı əlavə edə bilərsiniz. "Kateqoriyada" (və ya "Sətrlərdə" dadmaq üçün) əlavə edin əməliyyat sistemi, məlumatlara - cn. "Dizayn" sekmesinde, istədiyiniz diaqram növünü seçə bilərsiniz, mən pasta diaqramına üstünlük verdim;



Pasta diaqramı.


İndi aydın görünür ki, davam edən yeniləməyə baxmayaraq, Windows XP ilə iş stansiyalarının və Windows 2003 ilə serverlərin ümumi sayı kifayət qədər böyükdür. Və cəhd etmək üçün bir şey var.


Sorğu kodu spoylerin altındadır.

qoy Mənbə = ActiveDirectory.Domains("domain.ru"), domain.ru = Mənbə()[#"Obyekt Kateqoriyaları"], computer1 = domain.ru(), #"Uzaq Sütunlar" = Cədvəl.RemoveColumns(computer1,() "user", "organizationalPerson", "person")), #"Digər silinmiş sütunlar" = Cədvəl.SelectColumns(#"Uzaq sütunlar",("displayName", "kompüter", "yuxarı")), #"Elementi genişləndir computer" = Table.ExpandRecordColumn(#"Digər uzaq sütunlar", "kompüter", ("cn", "operatingSystem", "operatingSystemServicePack", "operatingSystemVersion"), ("cn", "operatingSystem", "operatingSystemServicePack", " OperationSystemVersion")), #"Genişləndirilmiş üst" = Cədvəl.ExpandRecordColumn(#"Genişləndirilmiş kompüter", "yuxarı", ("whenCreated"), ("whenCreated")), #"Çıxarılan il" = Cədvəl.TransformColumns( #" Genişləndirilmiş element üstü",(("whenCreated", Date.Year))), #"Uzaq sütunlar1" = Cədvəl.RemoveColumns(#"Çıxarılan il",("displayName")) #"Uzaqdan çıxarılan sütunlar1"

Teqlər əlavə edin

0

CSV faylındakı istifadəçilərin böyük siyahısının AD qrupunun üzvü olub-olmadığını yoxlayan və nəticələri results.csv ünvanına yazan aşağıdakı işçi skriptim var.

Skripti necə çevirəcəyimi bilmirəm ki, mən $group = "InfraLite"-ı $group = DC olaraq dəyişə bilərəm.\List_Of_AD_Groups.CSV .

Beləliklə, skript yalnız bir AD qrupu üçün uyğunluqları qaytarmır, eyni zamanda List_of_AD_groups.csv-də olan 80 AD qrupu üçün uyğunluqları qaytarır. Yeni CSV sütununda hər bir AD qrupu üçün YES/NO yazmaq (və ya bu mümkün deyilsə, nəticələrlə hər qrup üçün ayrıca CSV faylı yaratmaq da eyni şeyi edəcək.

Mən $group-dan dəyəri və ixrac faylının adını dəyişdirərək və skripti 80 dəfə yenidən işə salmaqla bunu əl ilə edə bilərdim, lakin bunu etmək üçün PS ilə tez olmalıyam.

məsələn, results.csv?:

NAME AD_GROUP1 AD_GROUP2 AD_GROUP80 və s. user1 bəli yox bəli user2 xeyr bəli user3 yox bəli yox echo "UserName`InfraLite" >> results.csv $users = GC .\user_list.csv $group = "InfraLite" $members = Get-ADGroupMember -Identity $group -Rekursiv | Seçin -ExpandProperty SAMAccountName foreach ($users in $users) ( əgər ($üzvlər -$user ehtiva edir) ( əks-səda "$user $group`tYes" >> results.csv ) başqa ( echo "$user`tNo" >> nəticələr .csv) )

  • 2 cavab
  • Çeşidləmə:

    Fəaliyyət

0

Probleminizin mənasız həlli mövcud kodunuzu başqa bir döngəyə bükmək və hər qrup üçün çıxış faylı yaratmaq olardı:

$groups = Get-Content "C:\groups.txt" foreach ($qrupda $qrup) ( $members = Get-ADGroupMember ... ... )

Daha zərif yanaşma qrup xəritələmə şablonu yaratmaq, onu hər bir istifadəçi üçün klonlaşdırmaq və istifadəçinin qrup üzvlükləri ilə bir nüsxəni doldurmaq olardı. Buna bənzər bir şey işləməlidir:

$template = @() Get-Content "C:\groups.txt" | ForEach-Object ( $template[$_] = $false ) $qruplar = @() Get-ADGroup -Filter * | ForEach-Object ( $groups[$_.DistinguishedName] = $_.Name ) Get-ADUser -Filter * -Properties MemberOf | ForEach-Object ( $groupmap = $template.Clone() $_.MemberOf | ForEach-Object ( $groups[$_] ) | Where-Object ( $groupmap.ContainsKey($_) ) | ForEach-Object ( $groupmap) [$_] = $true ) Yeni-Obyekt -Tip PSObject -Property $groupmap ) | Export-Csv "C:\user_group_mapping.csv" -NoType

0

Mən bir müddətdir bununla oynayıram və düşünürəm ki, sizə tam olaraq nəyin arxasınca getdiyinizi əldə etməyin bir yolunu tapdım.

Düşünürəm ki, Ənsgər düzgün yolda idi, amma sonra gələni edə bilmədim. O qeyd etdi ki, yazı yazarkən AD mühitinə çıxışı olmayıb.

Mənə belə gəldi:

$UserArray = Get-Content "C:\Temp\Users.txt" $GroupArray = Get-Content "C:\Temp\Groups.txt" $OutputFile = "C:\Temp\Something.csv" # Hashtable qurulması daha sonra istifadə etmək üçün $UserHash = New-Object -TypeName System.Collections.Hashtable # UserHash-a istifadəçilər və üzvlük əlavə etmək üçün xarici döngə $UserArray | ForEach-Object( $UserInfo = Get-ADUser $_ -Properties MemberOf # LPAP sintaksisini yalnız qrupun SAMAccountName-ə ayırır $Memberships = $UserInfo.MemberOf | ForEach-Object((($_.Split(","))) .replace("CN=","") ) #İstifadəçi=Üzvlük cütünün Hash-a əlavə edilməsi $UserHash.Add($_,$Üzvlüklər) ) #İstifadəçi üçün obyekt yaratmaq üçün xarici dövrə $Results = $UserArray | ForEach-Object( # Əvvəlcə sadə obyekt yaradın $User = New-Object -TypeName PSCustomObject -Property @( Name = $_ ) # $GroupArray $GroupArray | ForEach-Object ( #Checking) əsasında obyektə üzvlər əlavə edin. Qrupun istifadəçinin üzvlük siyahısında olub-olmadığını görmək üçün $UserHash $UserIsMember = $UserHash.($User.Name) -içərir $_ #Obyektə əlavə xüsusiyyət və dəyəri $İstifadəçi | Üzv əlavə et -MemberType NoteProperty -Name $ _ -Value $UserIsMember ) #Obyektin dəyişəninə qaytarılması $İstifadəçini qaytarın ) #Obyektləri CSV-yə çevirin, sonra onları çıxarın $Nəticələr |

Ümid edək ki, hər şey məntiqlidir. Bacardığım qədər şərh etdim. Bunu işlətdiyiniz hər hansı bir maşında RSAT quraşdırılmasaydı, ADSI-yə çevirmək çox asan olardı. Ehtiyacınız varsa, mənə bildirin və mən bəzi tez dəyişikliklər edəcəm.

Bu gün biz bütün istifadəçilərin siyahısını Active Directory-dən ayrı bir fayla endirməyə çalışacağıq. Bu məsələdə əsas köməkçimiz PowerShell olacaq. Məsələ ondadır ki, Microsoft əvvəlcə PowerShell komanda konsolunu Windows server komponentlərini idarə etmək üçün əsas vasitə kimi planlaşdırmışdı. Və bu gün, bizdə artıq 2.0 versiyası olanda, ümumiyyətlə, belədir.

Hətta yaxın keçmişdə, AD ilə hansısa şəkildə qarşılıqlı əlaqədə olmaq üçün idarəçilərin ixtiyarında ya dsquery yardım proqramı, ya da müxtəlif növ skriptlər və ya yardım proqramları olmalıdır. Bu gün Windows Server 2008 R2-dən başlayaraq PowerShell vasitəsilə AD ilə işləyə bilərik. PowerShell 2.0-ın yaranması ilə Active Directory ilə qarşılıqlı əlaqə yaratmaq üçün xüsusi moduldan istifadə edilir Windows PowerShell üçün Active Directory Modulu, lazımi cmdletlərin siyahısını ehtiva edir. Tapşırıqlarımız üçün əmrdən istifadə edəcəyik Get-ADUser.

Beləliklə, PowerShell konsolunu hansı əməliyyat sisteminin altında işləyəcəyimizdən asılı olaraq "hazırlıq addımlarını" yerinə yetirməliyik.

1) Əgər biz Windows Server altında işləyiriksə 2012-ci versiyaya qədər, sonra əmri yerinə yetirməliyik:

  • Import-Module aktiv kataloqu – modulu AD-yə idxal etmək əmri

2012 və daha yüksək əməliyyat sistemi versiyaları üçün bu modul artıq defolt olaraq aktivdir.

2) Əgər biz hər hansı Windows müştərisindən işləyiriksə, onda Windows PowerShell komponenti üçün Active Directory Modulu quraşdırılmış halda RSAT uzaqdan idarəetmə paketi quraşdırılmalıdır.

Qeyd etmək lazımdır ki, Get-ADUser cmdletinin yüklənən məlumatların sayı 1000 istifadəçiyə qədər olduqda icra edilməsi tövsiyə olunur.

PowerShell istifadə edərək AD istifadəçilərinin ayrı bir fayla ixracı

Əvvəlcə Get-ADUser əmri üçün yardım çağıraq. Nəticədə, sonrakı idarəetmə üçün bütün lazımi əmrləri alacaqsınız.

  • Get-ADUser-ə kömək edin – köməyə zəng etmək əmri

PowerShell pəncərəsində bütün xüsusiyyətləri olan bütün istifadəçilərin siyahısını əldə etmək üçün aşağıdakı əmri yerinə yetirməlisiniz:

  • Get-ADUser -filtr * – AD istifadəçilərinin siyahısını ixrac edin

Bu yükləmə tamamilə informativ deyil və pəncərədə bütün lazımi məlumatlara uyğun gəlmir. Buna görə də, axtarışı daraltmağa və user1 adlı konkret istifadəçinin xüsusiyyətlərini göstərməyə çalışaq:

  • Get-ADUser -identity user1 -xassələr * – konkret istifadəçinin xassələrini ixrac etmək

İndi xassələri ilə bütün istifadəçilərin siyahısını xaricə ixrac etməyə çalışaq txt və ya csv fayl:

  • Get-ADUser -filtr * -xassələr * | Export-csv -path c:\users.csv -encoding Unicode – istifadəçiləri ayrıca fayla ixrac edin

Mən açara xüsusi diqqət yetirmək istərdim - Unicode kodlaşdırması. Bu, AD-dən ixrac edildikdən sonra rus kiril əlifbasının yüklənmiş faylda düzgün göstərilməsini təmin etməyə xidmət edir. Məsələn, Microsoft Excel vasitəsilə biz rus hərfləri əvəzinə sual işarələrini görəcəyik.

Fayla baxarkən məlumatlar bir sətirdə ixrac olunur və buna görə də oxunmur. Bunu dəyişdirmək üçün aşağıdakıları etməliyik: