Tüm kullanıcıları MS Active Directory'den (ITGC) kaldırmak için komut dosyaları
Ivan PiskunovStandart 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üklemeAş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.
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.
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.
Altın Numaralar Güzel bir telefon numarası nasıl satılır
Kripto para madenciliği: basit kelimelerle nedir
En iyi dizüstü bilgisayar işletim sistemi: Eksiksiz inceleme
Sınıf arkadaşlarından müzik indirmek için programlar Sosyal ağ sınıf arkadaşlarından üzücü bir şarkı indirin
Yandex tarayıcısının mobil versiyonu