PowerShell kullanarak Active Directory'deki artık bilgisayar nesnelerini nasıl bulurum?


10

Active Directory etki alanımda PowerShell kullanarak x gündür etkin olmayan tüm bilgisayar hesaplarını nasıl bulabilirim?

Bunu nasıl yapacağımı bildiğimi unutmayın. Bu sadece orada bilgi almak için kendi kendine cevaplanan bir sorudur. Başka birinin daha iyi bir yolu varsa, yayınlamaktan çekinmeyin!

Yanıtlar:


10

Bu size son 365 Gün boyunca hiçbir etkinliği olmayan tüm bilgisayar hesaplarını verir.

Search-ADAccount -AccountInactive -ComputersOnly -TimeSpan 365.00:00:00

Bu sizin için lastlogondate göre sıralar.

Search-ADAccount -AccountInactive -ComputersOnly -TimeSpan 365.00:00:00 | Sort-Object lastlogondate | Ft name,lastlogondate -auto

Bu size devre dışı bırakılmış bilgisayar hesapları sağlar.

Search-ADAccount -AccountDisabled -ComputersOnly 

İlginç! (Açıkçası) o cmdlet'i bilmiyordum. "AccountInactive" için hangi özellik ölçülür? lastlogondate? passwordlastset?
MDMarra

% 100 emin olmak için bakmak zorunda kalacağım, ama biliyorum ki lastlogondate nesneye bakarsanız döndürülen özniteliklerden biri, passwordlastset değil. Technet makalesi, hangi özelliği kullandığını gerçekten detaylandırmıyor.
Mike

1
Biraz daha içine baktım ve lastlogondate sadece lastlogontimestamp'ın dönüşümü gibi görünüyor. Şemada lastlogondate adı verilen bir özellik yoktur. Umarım yardımcı olur.
Mike

5

Bilgisayarlar hesap şifrelerini varsayılan olarak her 30 günde bir değiştirir. Bir bilgisayar uzun süre şifresini değiştirmediyse, artık ağa bağlı olmadıkları anlamına gelir.

Bu PowerShell betiği 2 metin dosyası çıkarır. Biri devre dışı bırakılmış bilgisayarlar için, bir tanesi artık bilgisayar hesabı nesneleri içindir. Active Directory PowerShell modülünün yüklü olması gerekir.

Bu örnekte, uzun süre bağlantısı kesilen mobil dizüstü bilgisayarlar oldukları için "Şifreli Dizüstü Bilgisayarlar" OU'sunu hariç tutuyorum. Benzer bir kurulumunuz yoksa bu bölümü kaldırabilirsiniz

Import-Module ActiveDirectory

$Date = [DateTime]::Today

#Sets the deadline for when computers should have last changed their password by.
$Deadline = $Date.AddDays(-365)   

#Makes the date string for file naming
$FileName = [string]$Date.month + [string]$Date.day + [string]$Date.year 


#Generates a list of computer accounts that are enabled and aren't in the Encrypted Computers OU, but haven't set their password since $Deadline
$OldList = Get-ADComputer -Filter {(PasswordLastSet -le $Deadline) -and (Enabled -eq $TRUE)} -Properties PasswordLastSet -ResultSetSize $NULL |
Where {$_.DistinguishedName -notlike "*Encrypted Laptops*"} | 
Sort-Object -property Name | FT Name,PasswordLastSet,Enabled -auto 

#Generates a list of computer accounts that are disabled and sorts by name.
$DisabledList = Get-ADComputer -Filter {(Enabled -eq $FALSE)} -Properties PasswordLastSet -ResultSetSize $null | 
Sort-Object -property Name | FT Name,PasswordLastSet,Enabled -auto

#Creates the two files, assuming they are not $NULL. If they are $NULL, the file will not be created.
if ($OldList -ne $NULL) {
    Out-File "C:\users\marra\desktop\Old$Filename.txt" -InputObject $OldList
}

if ($DisabledList -ne $NULL) {
    Out-File "C:\users\marra\desktop\Disabled$Filename.txt" -InputObject $DisabledList
}

0

Bir milyon teşekkür ederim! Buna benim ince ayarımı eklemek istedim. Yalnızca devre dışı bırakılmış veya devre dışı bırakılmamış ve üretimde olmayan sunucuları bulmam gerekiyordu. Ben de öyle geldim ve işe yarıyor gibiydi.

Import-Module ActiveDirectory

$Date = [DateTime]::Today

#Sets the deadline for when computers should have last changed their password by.
$Deadline = $Date.AddDays(-365)   

#Makes the date string for file naming
$FileName = [string]$Date.month + [string]$Date.day + [string]$Date.year 

#Generates a list of computer server accounts that are enabled, but haven't set their password since $Deadline
$OldList = Get-ADComputer -Filter {(PasswordLastSet -le $Deadline) -and (Enabled -eq $TRUE) -and (OperatingSystem -Like "Windows *Server*")} -Properties PasswordLastSet -ResultSetSize $NULL |
Sort-Object -property Name | FT Name,PasswordLastSet,Enabled -auto 

#Generates a list of computer server accounts that are disabled and sorts by name.
$DisabledList = Get-ADComputer -Filter {(Enabled -eq $FALSE) -and (OperatingSystem -Like "Windows *Server*")} -Properties PasswordLastSet -ResultSetSize $null | 
Sort-Object -property Name | FT Name,PasswordLastSet,Enabled -auto

#Creates the two files, assuming they are not $NULL. If they are $NULL, the file will not be created.
if ($OldList -ne $NULL) {
    Out-File "C:\temp\Old$Filename.txt" -InputObject $OldList
}

if ($DisabledList -ne $NULL) {
    Out-File "C:\temp\Disabled$Filename.txt" -InputObject $DisabledList
} 

0

OP'nin PowerShell'i açıkça istediğini biliyorum, ancak beğenmediyseniz, sahip değilsiniz ve başka bir Microsoft sözdizimi öğrenmek istemiyorsanız, aşağıdaki Python snippet'i size doğru formatta bir tarih verecektir LDAP sorgusu.

import datetime, time
def w32todatetime(w32):
    return datetime.fromtimestamp((w32/10000000) - 11644473600)
def datetimetow32(dt):
    return int((time.mktime(dt.timetuple()) + 11644473600) * 10000000)

90daysago = datetime.datetime.now() - datetime.timedelta(days=90)
print datetimetow32(90daysago)

Daha sonra, son 90 gün içinde şifrelerini değiştirmeyen tüm Windows bilgisayarlarını bulmak için aşağıdaki gibi kullanılabilir.

(&(objectCategory=computer)(objectClass=computer)(operatingSystem=Windows*)(pwdLastSet<=130604356890000000))

Windows makinelerinin parolalarını değiştirmesi için varsayılan süre 30 gündür, ancak Bob'un masasının altına oturan ve asla açılmayan PC'yi unutmanız durumunda 90 daha güvenli görünüyor.

DÜZENLEME: Ah, bu kullanım durumunda muhtemelen önemli olmayan ama başkalarında da olabilecek zaman dilimi desteğini atladım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.