PowerShell ile Aktif Dizindeki Aktif Olmayan Bilgisayarları ve Kullanıcıları Nasıl Bulursunuz?


Oldukça sık bir Active Directory yöneticisinin görevi, devre dışı bırakılmış veya etkin olmayan kullanıcı ve/veya bilgisayar hesaplarının bir listesini yapmaktır. Bir Active Directory etki alanındaki etkin olmayan nesnelerin bir listesini almak için hem ADUC konsolunda kayıtlı LDAP sorgularını hem de PowerShell cmdlet'lerini kullanabilirsiniz. Bu makalede, etkin olmayan kullanıcı ve bilgisayar hesaplarını bulmak için PowerShell'i nasıl kullanacağınızı göstereceğiz.

Active Directory yöneticisinin kullanılmayan bilgisayarları ve kullanıcı hesaplarını periyodik olarak devre dışı bırakması ve kaldırması gerekir. Bu, AD veritabanının (ntds.dit dosyası) boyutunu küçültür ve ayrıca bir saldırganın veya eski çalışanların etki alanına erişmek için eski hesapları kullanma riskini azaltır.

Aşağıda açıklanan tüm PowerShell cmdlet'lerini kullanmak için, bilgisayarda en az PowerShell sürüm 3.0 ve Uzak Sunucu Yönetim Araç Seti (RSAT) kurulu olmalıdır. RSAT'tan Windows PowerShell için Active Directory Modülünü etkinleştirin (Denetim Masası -> Programlar-> Windows Özelliklerini Açın ve Kapatın-> Uzak Sunucu Yönetim Araçları -> Rol Yönetim Araçları -> AD DS ve AD LDS Araçları).

RSAT özelliğinin en son Windows 10 yapılarına yüklenmesiyle ilgili ayrıntılar.

Bu PowerShell modülü, şu komut kullanılarak da etkinleştirilebilir:

Add-WindowsFeature RSAT-AD-PowerShell

PowerShell konsolunu başlatın ve PowerShell modülü için Active Directory'yi içe aktarın:

Import-Module ActiveDirectory

Aktif Dizin Alanında Aktif Olmayan (Eski) Bilgisayarlar Nasıl Bulunur?

Bir etki alanındaki etkin olmayan bilgisayar nesnelerini bulmak için Get-ADComputer cmdlet'ini kullanabilirsiniz. LastLogonTimeStamp özelliği, arama kriteri olarak kullanılabilir. Bu özniteliğin, bir bilgisayarın etki alanında en son ne zaman oturum açtığı hakkında gerçek zamanlı bilgileri almak için kullanılamayacağını unutmayın. Ancak, bu özniteliğin DC'ler arasında 9-14 günde bir çoğaltılması nedeniyle, herhangi bir etki alanı denetleyicisinden (yalnızca güncellenen LastLogonDate özniteliğinin aksine) son bilgisayar oturum açma zamanı hakkında bilgi alabilirsiniz. bilgisayarın oturum açtığı DC'de).

LastLogonTimeStamp özniteliğinin geçerli değerini, ADUC konsolundaki Nitelikler Düzenleyici sekmesindeki bilgisayar özelliklerinde kontrol edebilirsiniz.

Belirli bir kuruluş biriminde 180 günden uzun süredir oturum açmayan tüm bilgisayarları bulmak için aşağıdaki komutları kullanın:

$LastLogonDate= (Get-Date).AddDays(-180)
Get-ADComputer -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate }  -SearchBase ‘OU=Computers,OU=Mun,DC=a-d,dc=com’| Sort LastLogonTimeStamp| FT Name, @{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}} -AutoSize | Export-CSV c:\ps\inactive_computers.csv

Bu komut, etki alanında altı aydan uzun süredir kayıtlı olmayan etkin olmayan bilgisayarların listesini içeren bir CSV dosyası oluşturur.

Bulunan bilgisayar hesaplarını devre dışı bırakabilirsiniz:

Get-ADComputer -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate }  -SearchBase ‘OU=Computers,OU=Mun,dc=a-d,dc=com’| Disable-ADAccount

Bu bilgisayar nesnelerini ayrı bir kuruluş birimine taşıyın:

Get-ADComputer ... | Move-ADObject -TargetPath “OU=Disabled Computers,DC=a-d,DC=com”

Veya etkin olmayan bilgisayarları silin:

Get-ADComputer ... | Remove-ADComputer

Active Directory'de Etkin Olmayan Kullanıcı Hesaplarını Bulun

Etkin olmayan kullanıcı hesaplarını bulmak için lastLogonTimeStamp özniteliğini de kullanabilirsiniz. Etkin olmayan kullanıcıların bir listesini oluşturmak için, lastLogon'u değil, bu özniteliği kullanmanız gerekir (lastLogon özniteliği, etki alanı denetleyicileri arasında çoğaltılmaz).

Aşağıdaki komut dosyası, Get-ADUser cmdlet'ini kullanarak etki alanında altı aydan (180 gün) uzun süredir oturum açmamış etkin kullanıcı hesaplarının seçilmesine izin verir:

$LastLogonDate= (Get-Date).AddDays(-180)
Get-ADUser -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate }  -SearchBase ‘OU=Users,OU=Mun,dc=a-d,dc=com’| ?{$_.Enabled -eq $True} |  Sort LastLogonTimeStamp| FT Name, @{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}} -AutoSize | Export-CSV c:\ps\inactive_users.csv

Etkin olmayan kullanıcıları devre dışı bırakabilirsiniz:

Get-ADUser -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate }  -SearchBase ‘OU=Users,OU=Mun,dc=a-d,dc=com’| Disable-ADAccount

Etkin olmayan kullanıcı hesaplarını AD'den kaldırmanız gerekirse, işlem hattını kullanın.

Remove-ADUser

Etkin Olmayan AD Nesnelerini Bulmak için Search-ADAccount'u Kullanma

AD'de etkin olmayan nesneleri bulmak için Get-ADUser, Get-ADComputer veya Get-ADObject cmdlet'lerini kullanabilirsiniz. Ancak, bu komutlar için doğru filtreyi oluşturmak zor olabilir. ActiveDirectory PowerShell modülü, bu görevleri gerçekleştirmek için daha kullanışlı bir cmdlet'e sahiptir - Search-ADAccount. Bu cmdlet, herhangi bir türdeki nesneleri (hem kullanıcılar hem de bilgisayarlar) bulmak için kullanılır. AD'de devre dışı bırakılmış, etkin olmayan ve kilitli nesneleri aramak gibi tipik görevler için Search-ADAccount cmdlet'ini kullanma örneklerine bakalım.

Search-ADAccount cmdlet'inin en önemli anahtarlarının listesi aşağıdadır:

-AccountDisabled

Devre dışı bırakılan hesapları arayın

-AccountExpired

Süresi dolmuş hesapların aranması

-AccountExpiring [-DateTime DateTime] [-TimeSpan TimeSpan]

Belirli bir süre (-TimeSpan) veya belirli bir tarihte (-DateTime) sona erecek hesapların aranması

-AccountInactive [-DateTime DateTime] [-TimeSpan TimeSpan]

Belirli bir tarihten (-DateTime) beri veya belirli bir süre boyunca (-TimeSpan) giriş yapılmamış hesapların aranması

-LockedOut

Etki alanı parola politikası tarafından kilitlenen hesapların aranması

-PasswordExpired

Süresi dolmuş şifrelere sahip hesapları arayın

-PasswordNeverExpires

PasswordNeverExpires özniteliği ayarlanmış hesaplar (UserAccountControl özniteliği)

Not. Varsayılan olarak, Search-ADAccount cmdlet'i hem kullanıcı hem de bilgisayar hesaplarını aynı anda arar. Yalnızca kullanıcıları veya bilgisayarları aramak için şu anahtarlardan birini kullanmanız gerekir: ComputersOnly veya UsersOnly.

Örneğin, etki alanındaki devre dışı bırakılmış kullanıcı hesaplarının listesini görüntüleyelim:

Search-ADAccount -UsersOnly -AccountDisabled

Arama kapsamını belirli bir Active Directory kapsayıcısı (OU) ile sınırlayabilirsiniz:

Search-ADAccount -UsersOnly -AccountDisabled -searchbase "OU=Admins,OU=Accounts,DC=a-d,DC=com"

Aynı veriler, bu komut kullanılarak daha uygun bir tablo biçiminde sunulabilir:

Search-ADAccount -UsersOnly -AccountDisabled -searchbase "OU=Admins,OU=Accounts,DC=a-d,DC=com"|ft -AutoSize

Belirli kullanıcı özniteliklerini içeren devre dışı bırakılmış kullanıcıların listesini almanız ve sıralanacak bir grafik tablo olarak sunmanız gerekiyorsa, aşağıdakileri çalıştırın:

Search-ADAccount -UsersOnly AccountDisabled |sort LastLogonDate | Select Name,LastLogonDate,DistinguishedName |out-gridview -title "Disabled Users"

Kilitli kullanıcı hesaplarının listesi:

Search-ADAccount -UsersOnly -LockedOut

Son 60 gün içinde etkin olmayan kullanıcı hesaplarının listesi:

$timespan = New-Timespan -Days 60
Search-ADAccount -UsersOnly -AccountInactive -TimeSpan $timespan | ?{$_.Enabled -eq $True}

Bu kullanıcı hesaplarını saymak için:

Search-ADAccount -UsersOnly -AccountInactive -TimeSpan $timespan | ?{$_.Enabled -eq $True} | Measure

Etki alanı ağına son 90 gün içinde kayıtlı olmayan bilgisayarların listesi:

Search-ADAccount -AccountInactive -ComputersOnly -TimeSpan 90

Veya belirli bir tarihten itibaren:

Search-ADAccount -AccountInactive -ComputersOnly -DateTime ‘1/1/2021’|Select Name,LastLogonDate| ft

Nesne listesini bir CSV'ye dışa aktarmak için şu komutu kullanın:

Search-ADAccount -AccountDisabled -UsersOnly| Export-Csv "c:\ps\disabled_users.csv"

İlgili makaleler