Odpowiedzi:
To da ci wszystkie konta komputerów, które nie mają żadnej aktywności przez ostatnie 365 dni.
Search-ADAccount -AccountInactive -ComputersOnly -TimeSpan 365.00:00:00
To posortuje to dla ciebie według lastlogondate.
Search-ADAccount -AccountInactive -ComputersOnly -TimeSpan 365.00:00:00 | Sort-Object lastlogondate | Ft name,lastlogondate -auto
Dałoby to wyłączone konta komputerowe.
Search-ADAccount -AccountDisabled -ComputersOnly
Komputery domyślnie zmieniają hasło do konta co 30 dni. Jeśli komputer nie zmienił swojego hasła przez dłuższy czas, oznacza to, że nie jest już podłączony do sieci.
Ten skrypt PowerShell wyświetli 2 pliki tekstowe. Jeden dotyczy komputerów niepełnosprawnych, drugi dotyczy osieroconych obiektów kont komputerów. Musisz mieć zainstalowany moduł PowerShell Active Directory.
W tym przykładzie wykluczam jednostkę organizacyjną „Szyfrowane laptopy”, ponieważ są to mobilne laptopy, które są odłączone na dłuższy czas. Możesz usunąć tę sekcję, jeśli nie masz podobnej konfiguracji
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
}
Milion dziękuję! Chciałem dodać do tego moje ulepszenie. Musiałem znaleźć tylko serwery, które zostały wyłączone lub nie zostały wyłączone i nie są produkowane. Właśnie to wymyśliłem i wydawało się, że działa.
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
}
Wiem, że OP wyraźnie poprosił o PowerShell, ale jeśli ci się nie podoba, nie masz go i nie chcesz nauczyć się kolejnej składni Microsoft, to następujący fragment kodu w Pythonie poda datę w odpowiednim formacie do użycia za pomocą zapytania LDAP.
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)
Którego następnie można użyć w następujący sposób, aby znaleźć wszystkie komputery z systemem Windows, które nie zmieniły swoich haseł w ciągu ostatnich 90 dni.
(&(objectCategory=computer)(objectClass=computer)(operatingSystem=Windows*)(pwdLastSet<=130604356890000000))
Prawdopodobnie potrzebujesz tylko 30, ponieważ domyślny okres, w którym maszyny z systemem Windows mogą zmienić hasło, to 30 dni, ale 90 wydaje się bezpieczniejsze na wypadek, gdybyś zapomniał o komputerze, który znajduje się pod biurkiem Boba i nigdy się nie włącza.
EDYCJA: Och, pominąłem także obsługę stref czasowych, co prawdopodobnie nie ma znaczenia w tym przypadku użycia, ale może w innych.