Active Directory'de etkin olmayan kullanıcıları arayın. AD Etki Alanı Kullanıcıları Hakkında Çeşitli Bilgiler Almak için Get-ADUser'ı Kullanma

  • 23.07.2019

Tüm kullanıcıları MS Active Directory'den (ITGC) kaldırmak için komut dosyaları

Ivan Piskunov

Standart denetim prosedürlerinden biri ITGC katalog için Aktif Dizin tüm etki alanı kullanıcılarının indirilmesini sağlamaktır. Elde edilen verilere dayanarak, örneğin yönetici listesini incelemek veya süresi dolmuş bir parolaya sahip kullanıcıları belirlemek gibi test prosedürleri daha da oluşturulur. Böyle bir boşaltma oluşturmanın en etkili yolu standart arabirimi kullanmaktır. Güç kalkanı , bu makalede ele alacağımız örnekleri.

1. PowerShell betiği ile hızlı yükleme

Aşağıda, bir AD etki alanının tüm kullanıcılarının bir listesini CSV biçiminde almanın en kolay ve en hızlı yollarından biri olan ve aynı Excel tarafından sorunsuz bir şekilde açılabilen bir PowerShell betiği verilmiştir.

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = "LDAP://ou=Users,ou=Departmets,dc=test,dc=tr" $objSearcher.Filter = "(&(objectCategory=person) (!userAccountControl:1.2.840.113556.1.4.803:=2))" $users = $objSearcher.FindAll() # Hesap sayısı $users.Count $users | ForEach-Object ( $user = $_.Properties New-Object PsObject -Property @( Title = $user.description Department = $user.department Login = $user.userprincipalname Telefon = $user.telephonenumber Room = $user.physicaldeliveryofficename Ad = $kullanici.cn ) ) | Export-Csv -NoClobber -Encoding utf8 -Path C: list_domain_users.csv

Komut dosyasının sisteminizde çalışması için, onu biraz düzeltmeniz, yani gerekli parametreleri girmeniz, yani. bu örnekte olduğu gibi bunlar parametrelerdir Kullanıcılar ünitede Bölümler etki alanında Test.ru. Ayrıca dosyanın kaydedildiği konumun yolunu da belirtin. list_domain_users.csv

Boşalttıktan sonra, hemen açılırsa list_domain_users.csv , okunamayan bir biçimde görünecek, ancak standart araçları kullanarak kolayca ihtiyacımız olan biçime getirebiliriz. Excel'de açma list_domain_users.csv , ilk sütunu seçin, ardından "Veri" sekmesine gidin ve "Sütunlara Göre Metin"i tıklayın. Sınırlandırılmış'ı seçin ve İleri'ye tıklayın. Hazır!

!Not bu betiğin 1000'den fazla kullanıcı göstermeyeceğini. Küçük bir firma için oldukça uygundur ancak domainde çok sayıda kullanıcıya sahip olanlar aşağıda açıklanan yöntemlere başvurmalıdır.

2. Active Directory Kullanıcı Yüklemelerini Almak için Gelişmiş PowerShell Cmdlet'i

Windows PowerShell için Active Directory Modülü aracı (Windows Server 2008 R2 ve sonraki sürümlerde sunulmuştur), AD dizin nesneleriyle çeşitli işlemler gerçekleştiren cmdlet'ler oluşturmanıza olanak tanır. Kullanıcılar ve özellikleri hakkında bilgi almak için cmdlet'i kullanın. Get-ADUser.

Başlamak bir Powershell penceresi başlat yönetici haklarıyla ve daha fazla işlem için Active Directory modülünü içe aktarın:
İçe Aktarma Modülü aktif dizini

İle tüm alan hesaplarını listele ve şu komutu çalıştırın:

Get-ADUser -filtre *

İle mevcut tüm özellikler hakkında tam bilgi göster kullanıcı tuser, komutu çalıştırın

Get-ADUser -identity tuser -özellikleri *


Örneğin, aşağıdakilerle ilgili bilgilerle ilgileniyoruz: süresi dolduğunda şifre değiştirme tarihi ve saati . Komut yürütmenin sonucu bir metin dosyasına aktarılabilir:

Get-ADUser -filter * -özellikler PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C:tempusers.txt

Veya hemen CSV'ye yükle , daha sonra uygun bir şekilde Excel'e aktarılacak (ayrıca, sıralama nesnesini kullanarak tabloyu PasswordLastSet sütununa göre sıralayacağız ve ayrıca bir where koşulu ekleyeceğiz - kullanıcı adı "Dmitry" dizesini içermelidir)

Get-ADUser -filter * -özellikler PasswordExpired, PasswordLastSet, PasswordNeverExpires | nerede ($_.name – “*Dmitry*” gibi) | sıralama nesnesi PasswordLastSet | seçme nesnesi Adı, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c:tempuser-password-expires-2015.csv

PowerShell'in ilk sürümünden bu yana Microsoft'un onu ana Windows yönetim aracı yapmaya çalıştığı bir sır değil. Ve birçok yönden işe yarıyor! Bugün basit örneklerle Active Directory kullanıcıları ve özellikleri hakkında çeşitli bilgiler almak için kullanılabilecek PowerShell özelliklerini göstereceğiz.

Not. Önceden, AD kullanıcı hesaplarının öznitelikleri hakkında bilgi edinmek için çeşitli araçlar kullanmanız gerekiyordu: ADUC konsolu (dahil), bir yardımcı program vb. Araç seçimi genellikle eldeki göreve ve yöneticinin programlama becerisine dayanıyordu.

PowerShell 2.0, cmdlet'leri AD dizinindeki nesnelerle çeşitli manipülasyonlar gerçekleştirmenize izin veren Active Directory - (Windows Server 2008 R2'de tanıtıldı) ile çalışmak için özel bir modül tanıttı. Active Directory etki alanı kullanıcıları ve özellikleri hakkında bilgi almak için cmdlet'i kullanın. Get-ADUser. AD'deki mevcut bir kullanıcı hesabının herhangi bir özniteliğinin değerini almak için Get-ADUser cmdlet'ini kullanabilirsiniz. Ek olarak, çeşitli seçim kriterleri belirleyebilir ve etki alanı kullanıcıları ve niteliklerinin listelerini oluşturabilirsiniz.

Bu örnekte, bir kullanıcının parolasının en son ne zaman değiştirildiği ve süresinin ne zaman dolacağı hakkında bilgi almak için Get-ADUser PowerShell cmdlet'inin nasıl kullanılacağını göstereceğiz.

Powershll penceresini yönetici haklarıyla başlatıyoruz ve Active Directory modülünü şu komutla içe aktarıyoruz:

İçe Aktarma Modülü aktif dizini

Tavsiye. Windows Server 2012 ve üzeri sürümlerde, Active Directory PowerShell modülü varsayılan olarak etkinleştirildiğinden bu adım atlanabilir.

İstemci işletim sisteminde (aynı Windows 10'da), Get-AdUser komutanının çalışması için uygun RSAT sürümünü yüklemeniz ve bileşeni kontrol panelinde etkinleştirmeniz gerekir. Windows PowerShell için Active Directory Modülü(Uzak Sunucu Yönetim Araçları -> Rol Yönetim Araçları -> AD DS ve AD LDS Araçları -> AD DS Araçları).

Get-ADUser cmdlet'ine yönelik tüm argümanların tam listesi şu şekilde elde edilebilir:

Get-ADUser'a yardım edin

Tüm etki alanı hesaplarının bir listesini görüntülemek için şu komutu çalıştırın:

Get-ADUser -filtre *

Döndürülen listenin formatının kullanımı çok uygun değil, 120'den fazla kullanıcı hesabı özniteliği ve özelliğinden (DN, SamAccountName, Name, UPN, vb.) yalnızca ana 10'dan bazıları görüntüleniyor, ayrıca görüyoruz ki son şifre değişikliğinin zamanı hakkında bilgi eksik.

Tuser kullanıcısının mevcut tüm öznitelikleri hakkında tam bilgileri görüntülemek için şu komutu çalıştırın:

Get-ADUser -identity tuser -özellikleri *

Bu nedenle, kullanıcı hesabıyla ilişkili AD kullanıcı özelliklerinin ve değerlerinin tam bir listesini görüyoruz. Daha sonra, ihtiyacımız olan alanların görüntülenmesi için Get-ADUser cmdlet'inin çıktısını biçimlendirmeye geçeceğiz. Niteliklerle ilgileniyoruz:

  • Şifrenin zamanı doldu
  • ŞifreSon Kümesi
  • ŞifreNeverExpires

Komutu çalıştıralım:

Get-ADUser tuser -özellikler PasswordExpired, PasswordLastSet, PasswordNeverExpires

Artık kullanıcı verileri, parolanın değiştirildiği tarih ve süresinin ne zaman dolacağı hakkında bilgi içerir. Bilgileri daha uygun bir tablo biçiminde sunalım:

Get-ADUser -filter * -özellikler PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

Belirli bir kuruluş biriminden gelen kullanıcı verilerini görüntülemek için parametreyi kullanın. arama tabanı:

Get-ADUser -SearchBase 'OU=Moscow,DC=winitpro,DC=loc' -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

Komut yürütmenin sonucu bir metin dosyasına aktarılabilir:

Get-ADUser -filter * -özellikler PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C:\temp\users.txt

Veya daha sonra kolaylıkla Excel'e aktarılacak olan CSV'de (isteğe bağlı olarak sıralama nesnesi tabloyu PasswordLastSet sütununa göre sıralayın ve ayrıca bir koşul ekleyin nerede– kullanıcı adı “Dmitry” dizesini içermelidir):

Get-ADUser -filter * -özellikler PasswordExpired, PasswordLastSet, PasswordNeverExpires | nerede ($_.name – “*Dmitry*” gibi) | sıralama nesnesi PasswordLastSet | seçme nesnesi Adı, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c:\temp\user-password-expires-2015.csv

Böylece, gerekli herhangi bir Active Directory kullanıcı özniteliği ile bir tablo oluşturabilirsiniz.

Belirli bir özniteliğe göre AD kullanıcı hesaplarının listesini almak için –Filter parametresini kullanın. Bu parametreye argüman olarak, Active Directory kullanıcılarının belirli özniteliklerinin değerini belirtebilirsiniz, sonuç olarak Get-ADUser cmdlet'i filtre kriterlerine uyan kullanıcılara uygulanacaktır.

Adı Roman ile başlayan AD kullanıcılarını listeleme:

Get-ADUser -filter ("Roman*" gibi ad)

Get-ADUser -Filter (SamAccountName -like "*") | Ölçü-Nesne

AD'deki tüm aktif (engellenmemiş) hesapların listesi:

Get-ADUser -Filter (Etkin -eq "True") | Select-Nesne SamHesapAdı,Adı,Soyadı,VerilenAdı | Format Tablosu

Süresi dolmuş şifresi olan hesapların listesi:

Get-ADUser -filter (Enabled -eq $True) -properties passwordSüresi Doldu | nerede($_.Şifrenin Süresi Doldu)

E-posta adreslerine sahip aktif hesapların listesi:

Get-ADUser -Filter ((mail -ne "null") -ve (Enabled -eq "true")) -Özellikler Soyadı,VerilenAd,posta | Select-Nesne Adı,Soyadı,VerilenAd,posta | Format Tablosu

Görev: Bir metin dosyasında (her satırda bir hesap) saklanan hesapların listesi için, kullanıcının telefon numarasını AD'den almanız ve bilgileri bir metin csv dosyasına yüklemeniz gerekir (kolaylıkla Esxel'e aktarılabilir).

Import-Csv c:\ps\usernsme_list.csv | ForEach ( Get-ADUser -identity $_.user -Properties Name, phoneNumber | Select Name, phoneNumber | Export-CSV c:\ps\export_ad_list.csv -Append -Encoding UTF8 )

Aşağıdaki örnek, şirketin adres defterini daha sonra Outlook veya Mozilla Thunderbird'e aktarılabilecek bir csv dosyası olarak indirmenize olanak tanır:

Get-ADUser -Filter ((mail -ne "null") -ve (Enabled -eq "true")) -Özellikler Soyadı,VerilenAd,posta | Select-Nesne Adı,Soyadı,VerilenAd,posta | Dışa Aktarma-Csv -NoTypeInformation -Kodlama utf8 -sınırlayıcı "," $env:temp\mail_list.csv

Son 90 gün içinde şifresini değiştirmeyen kullanıcılar:

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

$user = Get-ADUser winadmin -Özellikler thumbnailPhoto $user.thumbnailPhoto | Set-Content winadmin.jpg -Kodlama baytı

Kullanıcı hesabının üyesi olduğu grupların listesi

Get-AdUser winadmin -Properties Memberof | -expandproperty üyesini seçin

Dizin nesneleri oluşturmak, değiştirmek ve silmek için kullanılır. Kullanıcı ayrıca komutu kullanabilir ldifdeşemayı genişletmek, Active Directory kullanıcı ve grup bilgilerini diğer uygulamalara veya hizmetlere aktarmak ve Active Directory Uygulama Modu (ADAM) hizmetini diğer dizin hizmetlerinden verilerle doldurmak için.

Sözdizimi

ldifde [-i] [-f Dosya adı] [-s sunucu adı] [-c satır1 satır2] [-v] [-j yol] [-t Port numarası] [-d base_DN] [-r ldap_filter] [-p bölge] [-l LDAP_attribute_list] [ LDAP_attribute_list] [-g] [-m] [-n] [-k] [-a ] [-b ] [-? ]

Seçenekler

-i İçe aktarma modunu belirtir. Parametre tanımlı değilse, varsayılan olarak dışa aktarma modu kullanılır. -fDosya adı Alma veya verme dosyasının adını belirtir. -ssunucu adı İçeri veya dışarı aktarma işleminin gerçekleştirileceği bilgisayarı belirtir. Varsayılan program ldifde nerede bilgisayarda çalışacak ldifde Kurulmuş. -csatır1 satır2 Tüm oluşumları değiştirir satır1 içerik satır2. Genellikle bir etki alanından diğerine veri aktarırken ve dışa aktarılan etki alanının ayırt edici adını değiştirmeniz gerektiğinde kullanılır ( satır 1), alan adını içe aktarma ( hat 2). -v Ayrıntılı günlük modunu etkinleştirir. -jyol Günlük dosyasının konumunu belirtir. Varsayılan, geçerli yoldur. -tPort numarası Basit Dizin Erişim Protokolü (LDAP) bağlantı noktası numarasını belirtir. Varsayılan, LDAP bağlantı noktası 389'dur. Genel katalog bağlantı noktası 3268'dir. -dbase_DN Verileri dışa aktarmak için arama tabanının ayırt edici adını belirtir. -rLDAP filtresi Veri dışa aktarma için bir LDAP arama filtresi oluşturur. Örneğin, aşağıdaki filtre, belirli bir ikinci ada sahip tüm kullanıcıları dışa aktarır: csvde -r (ve (nesneSınıfı=kullanıcı)(sn=ikinci ad)) -pbölge Aramanın kapsamını belirtir. Arama kapsamı seçenekleri Temel, Bir Seviye ve alt ağaç. -lLDAP_attribute_list Bir dışa aktarma sorgusunun sonuçlarında döndürülen özniteliklerin listesini belirtir. Bu parametre atlanırsa, tüm nitelikler döndürülür. LDAP_attribute_list Dışa aktarma sorgusunun sonuçlarından çıkarılacak özniteliklerin listesini belirtir. Genellikle bu seçenek, nesneleri Active Directory'den dışa aktarırken ve ardından bunları başka bir LDAP uyumlu dizine alırken kullanılır. Herhangi bir öznitelik başka bir dizin tarafından desteklenmiyorsa, bu seçenek kullanılarak sonuç kümesinden çıkarılabilirler. -g Sayfalandırılmış aramaları hariç tutar. -m Yazılamayan özellikleri atlar, örneğin ObjectGUID ve nesneSID. -n İkili değerlerin dışa aktarımını atlar. -k İçe aktarma işlemi sırasında hataları yok sayar ve işlemeye devam eder. Aşağıda, yoksayılan hataların tam listesi bulunmaktadır:

  • nesne zaten grubun bir üyesidir;
  • içe aktarılan nesnenin başka özniteliği yoksa nesne sınıfı ihlali (belirtilen nesne sınıfının olmadığı anlamına gelir);
  • nesne zaten var;
  • kısıtlama ihlali;
  • nitelik veya değer zaten var;
  • böyle bir nesne yok.
-akullanıcı adı ayırt edici_adı şifre Komutun belirtilen kullanılarak yürütüleceğini belirtir. kullanıcının ayırt edici_adı ve şifre -b. -bkullanıcı adı alan şifresi Belirtilen kullanılarak yürütülecek bir komutu belirtir kullanıcı adı, etki alanı ve şifre. Varsayılan olarak komut, ağda oturum açmış olan kullanıcının kimlik bilgileri kullanılarak yürütülecektir. Parametre ile kullanılamaz -a. -? Komutların bir menüsünü görüntüler.

Notlar

  • parametre ile -c sabitleri kullanabilirsiniz #schemaAdlandırmaİçerik ve #configurationAdlandırmaİçerikşema dizini bölümünün ve yapılandırma dizini bölümünün ayırt edici adları yerine.
  • Bir komut için içe aktarma dosyası oluştururken ldifde, değeri kullan changeType içe aktarma dosyasında yer alan değişikliklerin türünü belirlemek için. değerler changeType aşağıdaki tabloda gösterilmiştir.

Aşağıdaki, değeri kullanan bir LDIF biçimi LDAP içe aktarma dosyası örneğidir. Ekle:
DN: CN=seçili_kullanıcı,DC=alan adı
değişiklik türü: Ekle
CN: seçili_kullanıcı
tanım:dosya_açıklaması
nesne sınıfı: kullanıcı
nesne sınıfı: seçili_kullanıcı

Örnekler

Döndürülen nesnelerin yalnızca ayırt edici adını, ortak adını, adını, soyadını ve telefon numarasını çıkarmak için şunu yazın:
-l Ayırt edici adı, CN, isim, SN, telefon
Bir nesnenin genel benzersiz tanımlayıcısını (GUID) hariç tutmak için şunu yazın:
When_created, ne zaman_değiştirildi, nesne GUID'i

0

Bir csv dosyasındaki geniş bir kullanıcı listesinin bir AD grubunun üyesi olup olmadığını kontrol eden ve sonuçları result.csv dosyasına yazan aşağıdaki çalışan komut dosyasına sahibim.

Komut dosyasını nasıl dönüştüreceğimden emin değilim, böylece $group = "InfraLite" öğesini $group = DC .\List_Of_AD_Groups.CSV olarak değiştirebilirim.

Bu nedenle komut dosyası yalnızca bir AD grubu için eşleşmeler döndürmez, böylece List_of_AD_groups.csv içinde bulunan 80 AD grubu için eşleşmeler döndürür. Yeni bir CSV sütununa her AD grubu için EVET/HAYIR yazmak (veya bu mümkün değilse, sonuçlarla birlikte her grup için ayrı bir CSV dosyası oluşturmak da aynısını yapar.

$group değerini değiştirerek ve dosya adını dışa aktararak ve komut dosyasını 80 kez yeniden çalıştırarak manuel olarak yapabilirim, ancak bunu yapmak için PS ile hızlı olmalıyım

örneğin, sonuçlar.csv ?:

AD_GROUP1 AD_GROUP2 AD_GROUP80 vb. user1 evet hayır evet user2 hayır hayır evet user3 hayır evet hayır echo "UserName`InfraLite" >> result.csv $users = GC .\user_list.csv $group = "InfraLite" $members = Get-ADGroupMember -Identity $group -Recursive | -ExpandProperty SAMAccountName foreach ($users içinde $user) ( if ($members - $user içerir) ( echo "$user $group`tYes" >> sonuçlar.csv ) öğesini seçin, başka ( echo "$user`tNo" >> sonuçlar .csv ))

  • 2 cevap
  • Sıralama:

    Aktivite

0

sorununuza önemsiz bir çözüm, mevcut kodunuzu başka bir döngüye sarmak ve her grup için bir çıktı dosyası oluşturmak olacaktır:

$groups = Get-Content "C:\groups.txt" foreach ($groups içindeki $group) ( $members = Get-ADGroupMember ... ... )

Daha zarif bir yaklaşım, bir grup eşleme şablonu oluşturmak, onu her kullanıcı için klonlamak ve kopyayı kullanıcının grup üyeliğiyle doldurmak olacaktır. Bunun gibi bir şey çalışması gerekir:

$şablon = @() Get-Content "C:\groups.txt" | ForEach-Object ( $template[$_] = $false ) $groups = @() 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 Nesne -Türü PSObject -Özellik $grup haritası ) | Dışa Aktarma-Csv "C:\user_group_mapping.csv" -NoType

0

Bir süredir bununla oynuyorum ve sanırım tam olarak peşinde olduğunuz şeyi elde etmenin bir yolunu buldum.

Bence Ansgar doğru yoldaydı ama sonrasını ona yaptıramadım. Yazma sırasında AD ortamına erişimi olmadığını belirtti.

İşte aklıma gelenler:

$UserArray = Get-Content "C:\Temp\Users.txt" $GroupArray = Get-Content "C:\Temp\Groups.txt" $OutputFile = "C:\Temp\Something.csv" # Bir karma tablo ayarlama daha sonra kullanmak için $UserHash = New-Object -TypeName System.Collections.Hashtable # UserHash'a kullanıcı ve üyelik eklemek için dış döngü $UserArray | ForEach-Object( $UserInfo = Get-ADUser $_ -Properties MemberOf # LPAP sözdizimini sadece grubun SAMAccountName kısmına sokar $Memberships = $UserInfo.MemberOf | ForEach-Object( ($_.Split(",")) .replace("CN=","") ) #Kullanıcı=Üyelik çiftini Hash'e ekleme $UserHash.Add($_,$Memberships) ) # Kullanıcı başına bir nesne oluşturmak için dış döngü $Results = $UserArray | ForEach-Object( # Önce basit bir nesne oluşturun $User = New-Object -TypeName PSCustomObject -Property @( Name = $_ ) # $GroupArray $GroupArray | ForEach-Object ( #Checking $UserHash, grubun kullanıcının üyelik listesinde görünüp görünmediğini görmek için $UserIsMember = $UserHash.($User.Name) -$_ #nesneye ekleme özelliği ve $User değerini içerir | _ -Value $UserIsMember ) #Nesneyi değişkene döndürme Return $User ) #Nesneleri bir CSV'ye dönüştürün, ardından çıktısını alın $Results | ConvertTo-CSV -NoTypeInformation | Out-File $OutputFile

Umalım ki her şey mantıklı olsun. Elimden geldiğince yorum yaptım. Bunu hangi makinede çalıştırırsanız çalıştırın, RSAT kurulu değilse, ADSI'ye dönüştürmek çok kolay olurdu. İhtiyacın olursa bana haber ver, ben de bazı hızlı düzenlemeler yapacağım.