• Tüm kullanıcıların MS Active Directory'den (ITGC) kaldırılmasına yönelik komut dosyaları. Active Directory'de etkin olmayan kullanıcıları bulma

    Bugün tüm kullanıcıların bir listesini yüklemeye çalışacağız. ayrı dosya itibaren Aktif Dizin. PowerShell bu konuda bizim baş yardımcımız olacaktır. Mesele şu ki, Microsoft başlangıçta planlamıştı komut konsolu Windows sunucu bileşenlerini yönetmek için ana araç olarak PowerShell. Ve bugün, zaten 2.0 sürümüne sahip olduğumuzda, bu genel olarak doğrudur.

    Yakın geçmişte bile, AD ile bir şekilde etkileşim kurabilmek için yöneticilerin ya dsquery yardımcı programına ya da çeşitli komut dosyalarına veya yardımcı programlara sahip olmaları gerekiyordu. Bugün Windows Server 2008 R2'den başlayarak PowerShell üzerinden AD ile çalışabiliyoruz. PowerShell 2.0'ın gelişiyle birlikte Active Directory ile etkileşim kurmak için özel bir modül kullanıldı Aktif Dizin Modülü Windows PowerShell gerekli cmdlet'lerin listesini içerir. Görevlerimiz için şu komutu kullanacağız: Get-ADUser.

    Yani PowerShell konsolunu hangi işletim sisteminde çalıştıracağımıza bağlı olarak “hazırlık adımlarını” uygulamamız gerekecek.

    1) Windows Server altında çalışıyorsak 2012 sürümüne kadar, o zaman şu komutu uygulamamız gerekiyor:

    • İçe Aktarma Modülü aktif dizini – modülü AD'ye aktarma komutu

    2012 ve üzeri işletim sistemi sürümleri için bu modül varsayılan olarak zaten etkindir.

    2) Herhangi bir istemci Windows'undan çalışıyorsak, paketin ona yüklenmesi gerekir. uzaktan yönetim RSAT, Active Directory Modülü yüklü olarak pencereler için Güç kalkanı.

    Yüklenen veri miktarı 1000 kullanıcıya kadar olduğunda Get-ADUser cmdlet'inin çalıştırılmasının önerildiğini belirtmekte fayda var.

    AD kullanıcılarını PowerShell kullanarak ayrı bir dosyaya aktarma

    Öncelikle Get-ADUser komutunun yardımını çağıralım. Sonuç olarak, daha fazla yönetim için gerekli tüm komutları alacaksınız.

    • Get-ADUser'a yardım et - yardım çağırma komutu

    Bir PowerShell penceresindeki tüm özelliklere sahip tüm kullanıcıların listesini almak için aşağıdaki komutu çalıştırmanız gerekir:

    • Get-ADUser -filtre * – AD kullanıcılarının listesini dışa aktar

    Bu boşaltma tamamen bilgilendirici değildir ve tüm pencereye sığmaz gerekli bilgi. Bu nedenle, aramayı daraltmaya ve user1 adlı belirli bir kullanıcının özelliklerini görüntülemeye çalışalım:

    • Get-ADUser -kimlik kullanıcı1 -özellikler * – belirli bir kullanıcının özelliklerini dışa aktarma

    Şimdi tüm kullanıcıların listesini mülkleriyle birlikte harici bir ortama aktarmayı deneyelim. txt veya csv dosya:

    • Get-ADUser -filter * -özellikler * | Export-csv -path c:\users.csv -kodlama Unicode – kullanıcıları ayrı bir dosyaya aktarın

    Anahtara özellikle dikkat etmek istiyorum - Unicode kodlama. AD'den dışa aktarıldıktan sonra Rus Kiril alfabesinin yüklenen dosyada doğru şekilde görüntülenebilmesini sağlamaya yarar. Örneğin Microsoft Excel aracılığıyla Rusça harfler yerine soru işaretlerini göreceğiz.

    Bir dosyayı görüntülerken veriler tek bir satıra aktarılır ve bu nedenle okunamaz. Bunu değiştirmek için aşağıdakileri yapmamız gerekir:

    Önceki makaleye yapılan yorumlarda muhasebeyi 1C yerine Excel'de hatırladılar. Peki Excel'i ne kadar bildiğinizi kontrol edelim. Bugün size Active Directory'den nasıl veri alacağınızı ve makrolar ve PowerShell olmadan yalnızca normal Office mekanizmalarıyla nasıl çalışacağınızı göstereceğim. Örneğin, halihazırda Microsoft SCOM gibi bir şeye sahip değilseniz, kuruluşunuzdaki işletim sistemlerinin kullanımına ilişkin analizleri kolayca alabilirsiniz. Ya da sadece ısınıp senaryolardan uzaklaşın.


    Elbette PowerShell’de sadece tek satır ile aşağıdaki örneklerdeki gibi verileri alabilirsiniz. Ancak, öncelikle PowerShell çok sıkıcıdır ve ikincisi, Excel verileri dinamik olarak güncelleyebilir - ortaya çıkan belgeler web'de yayınlanabilir ve bunları güncellemeyi unutabilir.

    Verilerle çalışmak için Power Query motorunu kullanacağım. Office 2010 ve 2013 için bir eklenti yüklemeniz gerekecektir. Microsoft Office 2016'da bu modül zaten yerleşiktir. Maalesef standart sürüm bize yetmiyor, Professional'a ihtiyacımız var.


    Mekanizmanın kendisi, eski ODBC'den ve çeşitli kaynaklardan veri almak ve işlemek için tasarlanmıştır. metin dosyaları, Exchange, Oracle ve Facebook'a. Mekanizma ve yerleşik hakkında daha fazla bilgi komut dosyası dili Habré'de "M" zaten yazıldı, ancak Active Directory'den veri almak için Power Query kullanımına ilişkin birkaç örneği analiz edeceğim.

    Isınma: kullanıcılarımızın ne zaman giriş yaptığını görün

    Etki alanı veritabanına yönelik sorgu, "Veri - Yeni sorgu - Diğer kaynaklardan - Active Directory'den" sekmesinde oluşturulur.



    Veri kaynağını belirtin.


    Bir alan adı seçmeniz, bağlantı için gerekli verileri belirtmeniz gerekecektir. Daha sonra, bu örnekte nesnelerin türünü seçiyoruz - kullanıcı. Önizleme penceresinin sağ tarafında, verilerin önizlemesini gösteren sorgu zaten çalışmaktadır.



    Talebi hazırlıyoruz, önizlemeye hayran kalıyoruz.


    Sorguyu önceden "düzenle" butonuna tıklayıp istediğiniz sütunları seçerek hazırlamalısınız. Aslında bu sütunlar sınıflardır ve ana sütun dışında her biri bir Active Directory nesnesinin belirli niteliklerini içerir. ekran adı, bu da başlı başına bir niteliktir. derslere devam edeceğim kullanıcı, kişi, tepe Ve güvenlikPrincipal. Artık, sütun başlığında iki ok bulunan bir simge olan "uzantı"yı kullanarak her sınıftan gerekli nitelikleri seçmeniz gerekir:

    • Sınıf kullanıcı seçerek genişletin son Oturum Açma Zaman Damgası Ve Kullanıcı Hesap Denetimi;
    • V kişi seçmek telefon numarası;
    • V tepene zaman oluşturuldu;
    • ve güvenlikPrincipalSamHesapAdı.


    Sorguyu genişletme.


    Şimdi bir filtre kuralım: Özellikle hesapların engellenmemesi için userAccountControl özelliğinin 512 veya 66048 değerine sahip olması gerekir. Filtre ortamınızda farklı olabilir. Bu özellik hakkında daha fazla bilgiyi Microsoft belgelerinde okuyabilirsiniz.



    Filtre uygulama.


    Bazen Excel, veri biçimini, özellikle de lastLogonTimestamp özelliğinin değerlerini yanlış belirler. Aniden böyle bir talihsizlik yaşanırsa, "Dönüştür" sekmesinde doğru formatı ayarlayabilirsiniz.

    Artık userAccountControl sütununun kaldırılması gerekiyor; ekranda buna hiç gerek yok. Ve "İndir ve Kapat"a tıklayın.


    Sonuç olarak, akla getirilmesi gereken çok az şey kalan bir tabak ortaya çıktı. Örneğin, sütunları okunabilir bir adla yeniden adlandırın. Ve otomatik veri güncellemelerini ayarlayın.


    Bir tablo açıldığında veya zaman aşımına uğradığında otomatik güncelleme, "Özellikler" bölümündeki "Veri" sekmesinde yapılandırılır.



    Veri güncelleme ayarları.


    Güncelleme kurulumu tamamlandıktan sonra, tabloyu personel departmanı personeline veya güvenlik hizmetine güvenle verebilirsiniz - sisteme kimin ve ne zaman girdiğini onlara bildirin.


    Spoylerin altında "M" dilinde kod isteyin.

    let Kaynak = ActiveDirectory.Domains("etki alanı.ru"), etki alanı.ru = Kaynak()[#"Nesne Kategorileri"], kullanıcı1 = etki alanı.ru(), #"Uzak Sütunlar" = Table.RemoveColumns(kullanıcı1,( "organizasyonelPerson", "shadowAccount", "posixAccount", "msExchOmaUser", "msExchBaseClass", "msExchIMRecipient", "msExchCertificateInformation", "msExchMultiMediaUser", "msExchMailStorage", "msExchCustomAttributes", "mailRecipient", "distinguishedName") ), #"ExpandedsecurityPrincipal" = Table.ExpandRecordColumn(#"Uzak sütunlar", "securityPrincipal", ("sAMAccountName"), ("sAMAccountName"), #"Expanded top" = Table.ExpandRecordColumn(#"ExpandedsecurityPrincipal ", "top ", ("WhenCreated"), ("whenCreated")), #"Genişletilmiş kişi" = Table.ExpandRecordColumn(#"Genişletilmiş üst", "kişi", ("telefonNumarası"), ("telefonNumarası")), #" Genişletilmiş kullanıcı" = Table.ExpandRecordColumn(#"Genişletilmiş kişi", "user", ("lastLogonTimestamp", "userAccountControl"), ("lastLogonTimestamp", "userAccountControl")), #"Filtre uygulanmış dizeler" = Table.SelectRows (#"Genişletilmiş öğe kullanıcısı", her biri ( = 512 veya = 66048)) #"Değiştirilen tür" = Table.TransformColumnTypes(#"Filtre uygulanmış satırlar",(("lastLogonTimestamp", type datetime))), #" Kaldırılan sütunlar1" = Table.RemoveColumns(#"Değiştirilen tür",("userAccountControl")), #"Kaldırılan sütunlar1"

    Adres defteri oluşturuyoruz veya kurumsal portal AD ile arkadaş olmadığında ne yapacağız?

    Başka bir değişken Excel'i kullanma Active Directory ile birlikte bu, AD verilerine dayalı bir adres defterinin oluşturulmasıdır. Açıktır ki Adres defteri yalnızca alan adı uygunsa geçerli olacaktır.


    Bir nesne için istek oluşturma kullanıcı, sınıfı genişlet kullanıcı V posta ve sınıf kişi V telefon numarası. hariç tüm sütunları sil Ayırt edici adı— alan adının yapısı işletmenin yapısını tekrarlar; bu nedenle adlar Organizasyon Birimleri departman adlarını eşleştirin. Benzer şekilde, güvenlik grupları da OU adları için temel olarak kullanılabilir.


    Şimdi çizgiden CN=Kullanıcı adı, OU=Muhasebe Departmanı, OU=Bölümler, DC=etki alanı, DC=ru doğrudan departmanın adını çıkarmanız gerekir. Bunu yapmanın en kolay yolu Dönüştür sekmesindeki sınırlayıcıları kullanmaktır.



    Metni çıkarıyoruz.


    Sınırlayıcı olarak kullanıyorum kuruluş birimi= Ve ,OU=. Prensip olarak virgül yeterlidir, ancak ben bunu riske atmıyorum.



    Ayırıcıları girin.


    Artık filtreyi kullanarak gereksizleri kesebilirsiniz sen engellenen kullanıcılar gibi ve Dahili, sıralamayı ayarlayın ve verileri tabloya yükleyin.



    Final masasının görünümü.

    Ajanların ve diğer preparatların kullanılmasına gerek kalmadan iş istasyonlarının bileşimi hakkında hızlı rapor

    Şimdi bilgisayarlardaki verileri alarak kullanışlı bir tablo oluşturmaya çalışalım. Şirketin durumu hakkında bir rapor hazırlayalım işletim sistemleri: bunun için bir sorgu oluşturacağız, ancak bu sefer gezginde seçeceğiz bilgisayar.



    Bilgisayar nesnesi üzerinde bir istek yapıyoruz.


    Sütun sınıflarından ayrılın bilgisayar Ve tepe ve bunları genişletin:

    • Sınıf bilgisayar seçerek genişletin cn, işletim sistemi, işletimSistemServis Paketi Ve işletimSistemVersiyonu;
    • sınıfta tepe seçmek ne zaman oluşturuldu.


    Genişletilmiş istek.


    İstenildiği takdirde sadece sunucu işletim sistemleri üzerinden raporlama yapabilirsiniz. Örneğin, OperatingSystem veya OperatingSystemVersion niteliğine bir filtre uygulayın. Bunu yapmayacağım ama yaratılış zamanının gösterimini düzelteceğim - sadece yılla ilgileniyorum. Bunu yapmak için "Dönüşüm" sekmesinde ihtiyacımız olan sütunu seçin ve "Tarih" menüsünde "Yıl"ı seçin.



    Yılı bilgisayarın etki alanına girdiği zamandan çıkarıyoruz.


    Artık görünen ad sütununu gereksiz olduğundan kaldırmak ve sonucu yüklemek kalıyor. Veriler hazır. Artık onlarla normal bir masada olduğu gibi çalışabilirsiniz. Başlamak için "Ekle" - "Özet Tablo" sekmesinde bir pivot tablo oluşturacağız. Veri kaynağı seçimine katılıyorum ve alanlarını ayarlıyoruz.



    Pivot tablo alanı ayarları.


    Artık sonucun tadına bakmak ve hayran olmak için tasarımı özelleştirmeye devam ediyor:



    AD'deki bilgisayarlar için pivot tablo.


    İsteğe bağlı olarak, yine "Ekle" sekmesinden bir özet grafik ekleyebilirsiniz. "Kategoriler"e (veya tatmak için "Satırlar"a) ekleyin işletim sistemi, verilere cn. "Tasarımcı" sekmesinden dilediğiniz grafik türünü seçebilirsiniz, ben pasta grafiğini tercih ettim.



    Yuvarlak diyagram.


    Artık, devam eden güncellemeye rağmen, Windows XP'li iş istasyonlarının ve Windows 2003'lü sunucuların toplam sayısının oldukça fazla olduğunu açıkça görebilirsiniz. Ve çabalanacak bir şey var.


    Spoylerin altındaki kodu isteyin.

    let Kaynak = ActiveDirectory.Domains("etki alanı.ru"), etki alanı.ru = Kaynak()[#"Nesne Kategorileri"], bilgisayar1 = etki alanı.ru(), #"Uzak Sütunlar" = Table.RemoveColumns(bilgisayar1,( "user", "organizationalPerson", "person")), #"Diğer uzak sütunlar" = Table.SelectColumns(#"Uzak sütunlar",("displayName", "computer", "top")), #"Genişletilmiş öğe bilgisayar" = Table.ExpandRecordColumn(#"Diğer uzak sütunlar", "bilgisayar", ("cn", "operatingSystem", "operatingSystemServicePack", "operatingSystemVersion"), ("cn", "operatingSystem", "operatingSystemServicePack", " OperatingSystemVersion"), #"Genişletilmiş üst" = Table.ExpandRecordColumn(#"Genişletilmiş bilgisayar", "top", ("WhenCreated"), ("WhenCreated")), #"Expanded top" = Table.TransformColumns( #"Expanded top",(("WhenCreated", Date.Year))), #"Kaldırılan sütunlar1" = Table.RemoveColumns(#"Çıkarılan yıl",("displayName")), #"Kaldırılan sütunlar1"

    Etiket ekle

    AD'yi yönetmek için PowerShell'i kullanmaya adanmıştır. Yazar, başlangıç ​​noktası olarak 10 tipik AD yönetimi görevini üstlenmeye ve bunların PowerShell kullanılarak nasıl basitleştirilebileceğini görmeye karar verdi:

    1. Kullanıcı şifresini sıfırla
    2. Etkinleştirme ve devre dışı bırakma Hesaplar
    3. Kullanıcı hesabının kilidini aç
    4. Hesabını sil
    5. Boş grupları bul
    6. Kullanıcıları bir gruba ekleme
    7. Grup üyelerini listeleyin
    8. Eski bilgisayar hesaplarını bulma
    9. Bilgisayar hesabını devre dışı bırak
    10. Bilgisayarları türe göre bulma

    Ek olarak, yazarın bir blogu var (elbette PowerShell'de), jdhitsolutions.com/blog adresine göz atmanızı öneririz. Ve onun twitter'ından alabileceğiniz en güncel bilgiler twitter.com/jeffhicks.
    Aşağıda “PowerShell ile Çözülen En İyi 10 Active Directory Görevi” makalesinin çevirisi yer almaktadır.

    Aktif Dizin (AD) yönetimi pencereler PowerShell düşündüğünüzden daha kolaydır ve bunu size kanıtlamak istiyorum. Aşağıdaki komut dosyalarını alıp bunları bir dizi AD yönetimi görevini çözmek için kullanabilirsiniz.

    Gereksinimler

    AD'yi yönetmek amacıyla PowerShell'i kullanmak için karşılanması gereken birkaç gereksinim vardır. Örnek bir Windows 7 makinesinde AD cmdlet'lerinin nasıl çalıştığını göstereceğim.
    Cmdlet'leri kullanmak için bir Windows Server 2008 R2 etki alanı denetleyicisine sahip olmanız gerekir veya Active Directory Yönetimi Ağ Geçidi Hizmetini eski DC'lere indirip yükleyebilirsiniz. Kurulumdan önce belgeleri dikkatlice okuyun; Yeniden başlatma gerekli.
    İstemci tarafında, Windows 7 veya Windows 8 için (RSAT) dosyasını indirip yükleyin. Windows 7'de açmanız gerekecek Kontrol panelleri bölüm Programlar ve Seç Windows Özelliklerini Açma veya Kapatma. Bulmak Uzak Sunucu Yönetim Araçları ve bölümü genişletin Rol Yönetim Araçları. AD DS ve AD LDS Araçları için uygun öğeleri seçin; özellikle öğenin seçilmesi gerektiğini unutmayın Windows PowerShell için Active Directory ModülüŞekil 1'de gösterildiği gibi. (Windows 8'de tüm araçlar varsayılan olarak seçilidir). Artık çalışmaya hazırız.

    Şekil 1 AD DS ve AD LDS Araçlarını Etkinleştirme

    Etki alanı yönetici haklarına sahip bir hesapla oturum açtım. Size göstereceğim cmdlet'lerin çoğu alternatif kimlik bilgileri belirlemenize olanak tanıyacak. Her durumda, yardımı okumanızı öneririm ( Yardım almak) ve aşağıda göstereceğim örnekler.
    Bir PowerShell oturumu başlatın ve modülü içe aktarın:

    PS C:\> İçe Aktarma Modülü ActiveDirectory

    İçe aktarma yeni bir PSDrive oluşturur ancak bunu kullanmayacağız. Ancak içe aktarılan modülde hangi komutların olduğunu görebilirsiniz.

    PS C:\> get-command -module ActiveDirectory

    Bu komutların güzelliği, eğer bir komutu bir AD nesnesi için kullanabiliyorsam, bu komutun 10, 100 ve hatta 1000 için de kullanılabilmesidir. Bu cmdlet'lerden bazılarının nasıl çalıştığını görelim.

    Görev 1: Kullanıcı Parolasını Sıfırla

    Tipik bir görevle başlayalım: Bir kullanıcının şifresini sıfırlamak. Bunu cmdlet aracılığıyla kolayca ve basit bir şekilde yapabilirsiniz. Set-ADAccountPassword. İşin zor kısmı şu ki Yeni Şifre güvenli bir dize olarak nitelendirilmelidir: PowerShell oturumu süresince şifrelenen ve bellekte tutulan bir metin parçası. Öncelikle yeni şifreli bir değişken oluşturalım:
    PS C:\> $new=Read-Host "Yeni şifreyi girin" -AsSecureString

    Ardından yeni bir şifre girin:

    Artık hesabı çıkartabiliriz (kullanarak samHesap adı en iyi seçenektir) ve yeni bir şifre belirleyin. İşte Jack Frost kullanıcısı için bir örnek:

    PS C:\> Set-ADAccountPassword jfrost -NewPassword $new

    Maalesef bu cmdlet'te bir hata var: -geçiş, -farzedelim, Ve -Onaylamakçalışmıyor. Kısayolu tercih ederseniz aşağıdakileri deneyin:

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

    Bir dahaki sefere oturum açtığımda Jack'in şifresini değiştirmesine ihtiyaç duyuyorum ve hesabı şunu kullanarak güncelliyorum: Set-ADUser.

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

    Cmdlet yürütmesinin sonuçları konsola yazılmaz. Yapılması gerekiyorsa kullanın -Doğru. Ancak cmdlet'i kullanarak kullanıcı adını çıkararak işlemin başarılı olup olmadığını öğrenebilirim Get-ADUser ve özelliğin belirtilmesi Şifrenin zamanı dolduŞekil 2'de gösterildiği gibi.


    Pirinç. 2. PasswordExpired özelliğine sahip Get-ADUser Cmdlet'inin sonuçları

    Sonuç olarak: kullanıcının şifresini şununla sıfırlayın: Güç kalkanı hiç de zor değil. İtiraf ediyorum ki şifreyi sıfırlamak da bir çırpıda kolaydır. aktif Dizin kulanıcıları ve bilgisayarları konsollar Microsoft Yönetim Konsolu (MMC). Ancak bir görevi devretmeniz gerekiyorsa, yukarıda belirtilen ek bileşeni dağıtmak istemiyorsanız veya büyük bir otomatik BT sürecinin parçası olarak parolanızı sıfırlamak istemiyorsanız PowerShell'i kullanmakta sorun yoktur.

    Görev 2: Hesapları etkinleştirin ve devre dışı bırakın

    Şimdi hesabı devre dışı bırakalım. Jack Frost'la çalışmaya devam edeceğiz. Bu kod parametreyi kullanır -farzedelim Komutumu çalıştırmadan test etmek için değişiklik yapan diğer cmdlet'lerde görebileceğiniz .

    PS C:\> ADaccount jfrost'u devre dışı bırakın -whatif Eğer: "CN=Jack Frost, OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local" Hedefinde "Set" işlemi gerçekleştiriliyor.

    Şimdi gerçekten devre dışı bırakalım:

    PS C:\> ADaccount jfrost'u devre dışı bırakın

    Hesabı etkinleştirme zamanı geldiğinde hangi cmdlet bize yardımcı olacaktır?

    PS C:\> Etkinleştirme-ADAccount jfrost

    Bu cmdlet'ler ardışık düzende bir ifadede kullanılabilir ve istediğiniz sayıda hesabı etkinleştirmenize veya devre dışı bırakmanıza olanak tanır. Örneğin, bu kod satış departmanındaki (Satış) tüm hesapları devre dışı bırakacaktır.

    PS C:\> get-aduser -filter "departman -eq "satış"" | bir hesap devre dışı bırak

    Tabii ki, bunun için bir filtre yazmak Get-ADUser oldukça karmaşık, ancak parametrenin kullanımı burada -farzedelim cmdlet'le birlikte ADaccount'u devre dışı bırak kurtarmaya gelir.

    Görev 3: Kullanıcı hesabının kilidini açın

    Jack'in yeni bir şifre girmeye çalışırken hesabını kilitlediği bir durumu düşünün. Hesabını GUI aracılığıyla bulmaya çalışmak yerine, kilit açma prosedürü basit bir komutla yapılabilir.

    PS C:\> ADAhesabının kilidini açın jfrost

    Cmdlet ayrıca parametreleri de destekler -farzedelim Ve -Onaylamak.

    Görev 4: Hesabı silin

    Kaç kullanıcıyı sildiğiniz önemli değil; bunu bir cmdlet ile yapmak kolaydır ADUser'ı Kaldır. Jack Frost'u kaldırmak istemiyorum ama isteseydim şu kodu kullanırdım:

    PS C:\> Remove-ADUser jfrost -whatif Ya olursa: "CN=Jack Frost,OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local" Hedefinde "Remove" işlemi gerçekleştiriliyor.

    Veya birden fazla kullanıcı girip bunları tek bir basit komutla kaldırabilirim:

    PS C:\> get-aduser -filter "enabled -eq "false"" -property WhenChanged -SearchBase "OU=Employees, DC=Globomantics,DC=Local" | nerede ($_.WhenChanged -le (Get-Date).AddDays(-180)) | Kaldır-ADuser -whatif

    Bu komut, 180 gün veya daha uzun süredir değişmeyen, devre dışı bırakılmış tüm Çalışan kuruluş birimi hesaplarını bulacak ve kaldıracaktır.

    Görev 5: Boş Grupları Bulma

    Grup yönetimi sonsuz ve nankör bir iştir. Boş grupları bulmanın birçok yolu vardır. Kuruluşunuza bağlı olarak bazı ifadeler diğerlerinden daha iyi sonuç verebilir. Aşağıdaki kod, yerleşik gruplar da dahil olmak üzere etki alanındaki tüm grupları bulacaktır.

    PS C:\> get-adgroup -filter * | nerede (-Not ($_ | get-adgroupmember)) | isim seç

    Yüzlerce üyesi olan gruplarınız varsa bu komutu kullanmak uzun zaman alabilir; Get-ADGroupMember her grubu kontrol eder. Sınırlayabilir veya özelleştirebilirseniz daha iyi olacaktır.
    İşte başka bir yaklaşım:

    PS C:\> get-adgroup -filter "üyeler -beğenmeyen "*" -AND GroupScope -eq "Universal"" -SearchBase "OU=Groups,OU=Employees,DC=Globomantics, DC=local" | Ad, Grup Seçiniz*

    Bu komut her şeyi bulur evrensel gruplar(Evrensel gruplar) OU Gruplarına üyeliği yoktur ve bazı özellikleri çıkarımlar yapar. Sonuç Şekil 3'te gösterilmektedir.


    Pirinç. 3. Evrensel grupları arayın ve filtreleyin

    Görev 6: Bir Gruba Kullanıcı Ekleme

    Jack Frost'u Chicago IT grubuna ekleyelim:

    PS C:\> add-adgroupmember "chicago IT" -Üyeler jfrost

    Evet, bu kadar basit. Ayrıca yüzlerce kullanıcıyı gruplara kolayca ekleyebilirsiniz, ancak bu bana göre biraz tuhaf:

    PS C:\> Add-ADGroupMember "Chicago Çalışanları" -üye (get-aduser -filter "city -eq "Chicago"")

    Chicago'da City mülkü olan tüm kullanıcıları bulmak için parantez içindeki ardışık düzen ifadesini kullandım. Parantez içindeki kod yürütülür ve elde edilen nesneler –Member parametresine iletilir. Her kullanıcı nesnesi Chicago Çalışanları grubuna eklenir. 5 ya da 5000 kullanıcıyla ilgileniyor olmamızın bir önemi yok, grup üyeliklerini güncellemek sadece birkaç saniye sürüyor. Bu ifade kullanılarak da yazılabilir. ForEach-Nesne hangisi daha uygun olabilir:

    PS C:\> Get-ADUser -filter "city -eq "Chicago"" | foreach(Add-ADGroupMember "Chicago Çalışanları" -Üye $_)

    Görev 7: Grup Üyelerinin Listesini Görüntüleme

    Belirli bir grupta kimin olduğunu bilmek isteyebilirsiniz. Örneğin, Domain Admins grubunda kimlerin olduğunu düzenli aralıklarla kontrol etmelisiniz:

    PS C:\> Get-ADGroupMember "Etki Alanı Yöneticileri"

    Şekil 4 sonucu göstermektedir.


    Pirinç. 4. Domain Admins grubunun üyeleri

    Cmdlet, her grup üyesi için bir AD nesnesi çıktısı verir. Peki ya iç içe geçmiş gruplar? Chicago Tüm Kullanıcılar grubum iç içe geçmiş gruplardan oluşan bir koleksiyondur. Tüm hesapların bir listesini almak için sadece parametreyi kullanmam gerekiyor –Özyinelemeli.

    PS C:\> Get-ADGroupMember "Chicago Tüm Kullanıcılar" -Recursive | Ayırt Edici Ad'ı seçin

    Diğer tarafa gitmek istiyorsanız (kullanıcının hangi gruplara ait olduğunu bulmak için) user özelliğini kullanın. Üyesi:

    PS C:\> get-aduser jfrost -property Memberof | -ExpandProperty memberOf CN=NewTest,OU=Gruplar,OU=Çalışanlar, DC=GLOBOMANTICS,DC=yerel CN=Chicago Test,OU=Gruplar,OU=Çalışanlar, DC=GLOBOMANTICS,DC=yerel CN=Chicago IT,OU= öğesini seçin Gruplar,OU=Çalışanlar, DC=GLOBOMANTICS,DC=yerel CN=Chicago Satış Kullanıcıları,OU=Gruplar,OU=Çalışanlar, DC=GLOBOMANTICS,DC=yerel

    Parametreyi kullandım -Özelliği Genişlet isimleri görüntülemek için Üyesi dizeler gibi.

    Görev 8: Eski bilgisayar hesaplarını bulun

    Bana sık sık şu soru soruluyor: "Güncelliği geçmiş bilgisayar hesaplarını nasıl bulurum?". Ve ben her zaman cevap veriyorum: "Senin için modası geçmiş olan nedir?" Şirketler, bir bilgisayar hesabının (veya kullanıcı hesabının) ne zaman eskimiş ve artık kullanılamaz olarak değerlendirileceğine ilişkin tanımlarına göre farklılık gösterir. Ben ise belirli bir süre şifresi değişmeyen hesaplara dikkat ediyorum. Benim için bu süre 90 gündür - eğer bilgisayar bu süre zarfında etki alanıyla birlikte şifreyi de değiştirmediyse, büyük olasılıkla çevrimdışıdır ve güncel değildir. Kullanılan cmdlet Get-ADComputer:

    PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -properties *| Ad,şifre sonsetini seçin

    Filtre sabit bir değerle harika çalışıyor ancak bu kod, 1 Ocak 2012'den bu yana şifrelerini değiştirmemiş tüm bilgisayar hesapları için güncellenecektir. Sonuçlar Şekil 5'te gösterilmektedir.


    Pirinç. 5. Güncelliğini yitirmiş bilgisayar hesaplarını bulun

    Alternatif olarak, en azından Windows 2003 etki alanı işlevsel düzeyinde olduğunuzu varsayalım. Son Oturum Açma Zamanı Damgası. Bu değer, 1 Ocak 1601'den bu yana 100 nanosaniyelik aralıkların sayısıdır ve GMT'de saklanır, dolayısıyla bu değerle çalışmak biraz zordur:

    PS C:\> get-adcomputer -filter "LastlogonTimestamp -gt 0" -properties * | adı seçin,lastlogontimestamp, @(Name="LastLogon";Expression=(::FromFileTime ($_.Lastlogontimestamp))),passwordlastset | SortLastLogonTimeStamp


    Pirinç. 6. LastLogonTimeStamp değerini tanıdık formata dönüştürün

    Filtre oluşturmak için 1 Ocak 2012 gibi bir tarihi doğru formata dönüştürmem gerekiyor. Dönüşüm FileTime'da yapılır:

    PS C:\> $cutoff=(Get-Date "1/1/2012").ToFileTime() PS C:\> $cutoff 129698676000000000

    Artık bu değişkeni filtrede kullanabilirim Get-ADComputer:

    PS C:\> Get-ADComputer -Filter "(lastlogontimestamp -lt $cutoff) -or (lastlogontimestamp -notlike "*")" -property * | Ad, Son Oturum Açma Zaman Damgası, Şifre Son Ayarı'nı seçin

    Yukarıdaki kod, Şekil 5'te gösterilen bilgisayarların aynılarını bulur.

    Görev 9: Bilgisayar hesabını devre dışı bırakın

    Etkin olmayan veya güncel olmayan hesaplar bulduğunuzda bunları devre dışı bırakmak isteyebilirsiniz. Bunu yapmak oldukça basittir. Kullanıcı hesaplarında kullandığımız cmdlet'in aynısını kullanacağız. Bunu kullanarak hassaslaştırabilirsiniz samHesap adı hesap.

    PS C:\> ADaccount'u devre dışı bırakın - Kimlik "chi-srv01$" -ne olursa olsun: "CN=CHI-SRV01, CN=Bilgisayarlar,DC=GLOBOMANTICS,DC=local" Hedefinde "Set" işlemi gerçekleştiriliyor.

    Veya bir boru hattı ifadesi kullanarak:

    PS C:\> get-adcomputer "chi-srv01" | ADaccount'u devre dışı bırak

    Kodumu eski hesapları bulmak ve hepsini devre dışı bırakmak için de kullanabilirim:

    PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -properties *| ADaccount'u devre dışı bırak

    Görev 10: Bilgisayarları türüne göre bulun

    Ayrıca sık sık bilgisayar hesaplarını sunucular veya iş istasyonları gibi türe göre nasıl bulacağım soruluyor. Bu sizin açınızdan biraz yaratıcılık gerektirir. AD'de işletim sistemi dışında sunucuyu istemciden ayıran hiçbir şey yoktur. Bilgisayarınız Windows Server 2008 çalıştırıyorsa birkaç ek adım daha uygulamanız gerekecektir.
    Öncelikle bir işletim sistemi listesi almanız gerekir, ardından hesapları mevcut işletim sistemine göre filtreleriz.

    PS C:\> Get-ADComputer -Filter * -Properties İşletim Sistemi | İşletim Sistemini Seçin -benzersiz | İşletim Sistemini Sırala

    Sonuçlar Şekil 7'de gösterilmektedir.


    Pirinç. 7. İşletim sistemi listesini çıkarın

    Sunucu işletim sistemi çalıştıran tüm bilgisayarları bulmak istiyorum:

    PS C:\> Get-ADComputer - "İşletim Sistemi - benzeri "*Sunucu*"" filtresini kullanın - özellikler İşletim Sistemi, İşletim Sistemi Hizmet Paketi | Ad Seçin, İşlem* | format listesi

    Sonuçlar Şekil 8'de gösterilmektedir.

    Diğer AD Get cmdlet'lerinde olduğu gibi, arama parametrelerini özelleştirebilir ve gerekirse sorguyu belirli kuruluş birimleriyle sınırlandırabilirsiniz. Gösterdiğim ifadelerin tümü büyük PowerShell ifadelerine entegre edilebilir. Örneğin, PowerShell'den sıralayabilir, gruplandırabilir, filtre uygulayabilir, CSV'ye aktarabilir veya HTML raporları oluşturup e-postayla gönderebilirsiniz! Bu durumda tek bir komut dosyası yazmanıza gerek yoktur.
    İşte size bir bonus: HTML dosyasına kaydedilmiş bir kullanıcı şifresi yaş raporu:

    PS C:\> Get-ADUser -Filter "Enabled -eq "True" -AND PasswordNeverExpires -eq "False"" -Properties PasswordLastSet,PasswordNeverExpires,PasswordExpired | DistinguishedName,Name,pass*,@(Name="PasswordAge"; Expression=((Get-Date)-$_.PasswordLastSet)) |sort PasswordAge -Descending | ConvertTo-Html -Title "Şifre Yaş Raporu" | Out-File c:\Work\pwage.htm !}

    Bu ifade biraz korkutucu görünse de, minimum bilgi PowerShell'in kullanımı kolaydır. Ve yalnızca son ipucu var: adı verilen özel bir özelliğin nasıl tanımlanacağı Şifre Yaşı. Değer, bugün ile PasswordLastSet özelliği arasındaki boşluktur. Daha sonra yeni mülküm için sonuçları sıralıyorum. Şekil 9, küçük test alanım için çıktıyı göstermektedir.

    Güncelleme:
    Gönderi portaldaki makalenin çevirisini içeriyor

    İyi günler sevgili okuyucular ve aboneler, Powershell ve Active Directory'nin olanaklarını sizlerle birlikte keşfetmeye devam ediyoruz. Hatırlayacağınız gibi tüm kullanıcı ve bilgisayar hesapları NTDS.dit veritabanında mevcut, her şey harika ve merkezi. Bir şirketin birden fazla sistem yöneticisi varsa, çöp ve ekstra kimlik bilgileri biriktirdiği ortaya çıkabilir. Hepimiz insanız ve bazı şeyleri unutabiliriz, bazı anlarda dikkatimiz dağılabilir, bu da önemli bilgilerin unutulmasına neden olur. Ve aktif olmayan kullanıcıların (kovulan veya unutulan) Actvie Directory'de her durumda iyi bir şekilde biriktiği sonucuna varıyoruz. Sistem yöneticisi bunları tanımlamalı, kapatmalı ve sonra istediğimiz zaman silmeliyiz, biz de bunu yapacağız.

    ADUC snap aracılığıyla

    Geçen sefer size Active ek bileşenini kullanmanın bir örneğini vermiştim. Dizin Kullanıcıları ve yerel ağda bir aydır görünmeyen kayıp bilgisayarları aradığımız bilgisayarlar. Şimdi aynısını kullanıcı hesapları için yapalım. Windows Server 2012 R2'de AD'im var, ADUC'u açın, bunu yapmak için WIN + R tuşlarına basın ve dsa.msc girin.

    Açılan talep formuna şunu girin:

    • Sorgu adı > benimki kayıp kullanıcılar
    • Gerekirse açıklama
    • Kök iste > burada alan adının tamamını bırakabilir veya istediğiniz kuruluş birimini belirtebilirsiniz

    Daha sonra istek butonuna tıklayın.

    Kullanıcılar sekmesinde "Bundan bu yana geçen gün sayısı" öğesini görüyoruz son giriş sistemde" örneğin 60 gün belirledim.

    Sonuç olarak, ihtiyacınız olan etkin olmayan çalışan hesaplarının listesini alacaksınız.

    Powershell snap aracılığıyla

    Bunların hepsi Powershell aracılığıyla yapılabilir. Görevi olan kodu hemen vereceğim arama devam ediyor etkin olmayan kullanıcılar, bunun için 45 günlük bir süre seçtim, kullanıcı verilerini devre dışı bıraktım ve bunun için özel olarak belirlenmiş bir kuruluş birimine geçtim.

    $date_with_offset=(Get-Date).AddDays(-45)
    $users = Get-ADUser -Properties LastLogonDate -Filter (LastLogonDate -lt $date_with_offset ) | SıralaSon Oturum Açma Tarihi
    foreach ($users içindeki $user) (set-aduser $user -enabled $false; move-adobject -identity $user -targetpath "ou=Dismissed,ou=Msk L.Users,ou=Location,dc=msk,dc= contoso,dc=com")
    Get-ADUser -Özellikler LastLogonDate -Filter (LastLogonDate -lt $date_with_offset ) | SıralaSon Oturum Açma Tarihi | FT Adı, LastLogonDate -AutoSize | Dış Dosya c:\Script\users.txt

    • İlk satırda arama periyodunu ayarlayacağınız bir değişken bildirirsiniz
    • Bir değişken oluşturun ve son giriş zamanına göre bir seçim yapın
    • Kullanıcıları taşıma

    • Bir dosyaya rapor oluşturma

    Kullanıcıyla çalışmak için daha yararlı şeyler. Aşağıdaki komutları kullanmadan önce Active Directory modülünü komut aracılığıyla yüklemeniz gerekir.

    Yardım Alın ADUser Alın

    Tüm kullanıcıların MS Active Directory'den (ITGC) kaldırılmasına yönelik 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 listesinin incelenmesi veya süresi dolmuş bir parolaya sahip kullanıcıların belirlenmesi gibi test prosedürleri oluşturulur. Böyle bir boşaltma oluşturmanın en etkili yolu kullanmak olacaktır. standart arayüz Güç kalkanı Bu makalede örneklerini ele alacağız.

    1. PowerShell betiğiyle hızlı yükleme

    Aşağıda en basit ve en basit olanlardan biri olan bir PowerShell betiği bulunmaktadır. hızlı yollar AD alanının tüm kullanıcılarının aynı Excel tarafından sorunsuz açılabilen CSV formatında bir listesini alın.

    $objSearcher = Yeni Nesne 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 Departman = $user.department Oturum Açma = $user.userprincipalname Telefon = $user.telephonenumber Oda = $user.physicaldeliveryofficename Ad = $kullanıcı.cn ) ) | Dışa Aktarma-Csv -NoClobber -Utf8 Kodlaması -Yol C: list_domain_users.csv

    Komut dosyasının sisteminizde çalışabilmesi için onu biraz düzeltmeniz, yani gerekli parametreleri girmeniz gerekir, 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 , okunamaz bir biçimde görünecektir, ancak standart araçları kullanarak onu kolayca ihtiyacımız olan formata 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" seçeneğini tıklayın. Sınırlandırılmış'ı seçin ve İleri'ye tıklayın. Hazır!

    !Not bu komut dosyasının 1000'den fazla kullanıcıyı görüntülemeyeceğini. Küçük bir şirket için oldukça uygundur ancak alanda çok sayıda kullanıcısı olanların aşağıda açıklanan yöntemlere başvurması gerekir.

    2. Active Directory Kullanıcı İndirmelerini 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 manipülasyonlar 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ına sahip olun 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 etki alanı hesaplarını listele ve şu komutu çalıştırın:

    Get-ADUser -filtre *

    İle geri çekilmek tüm bilgiler mevcut tüm özellikler hakkında kullanıcı kullanıcı, komutu çalıştırın

    Get-ADUser - kimlik kullanıcı - özellikleri *


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

    Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Adı, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C:tempusers.txt

    Veya hemen CSV'ye yükle , daha sonra uygun bir şekilde Excel'e aktarılacaktır (ayrıca sort-object 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 * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | nerede ($_.name –like “*Dmitry*”) | sıralama nesnesi PasswordLastSet | nesne seçme Adı, Parola Süresi Doldu, ParolaLastSet, ParolaNeverExpires | Export-csv -path c:tempuser-password-expires-2015.csv