Làm cách nào để tìm các đối tượng máy tính mồ côi trong Active Directory bằng PowerShell?


10

Làm cách nào tôi có thể tìm thấy tất cả các tài khoản máy tính trong miền Active Directory của mình đã không hoạt động trong x ngày bằng PowerShell?

Lưu ý rằng tôi thực sự biết làm thế nào để làm điều này. Đây là một câu hỏi tự trả lời chỉ để có được kiến ​​thức ngoài kia. Nếu bất cứ ai khác có một cách tốt hơn, hãy đăng nó!

Câu trả lời:


10

Điều này sẽ cung cấp cho bạn tất cả các tài khoản máy tính không có hoạt động trong 365 ngày qua.

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

Điều này sẽ sắp xếp nó cho bạn bằng Lastlogondate.

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

Điều này sẽ cung cấp cho bạn các tài khoản máy tính bị vô hiệu hóa.

Search-ADAccount -AccountDisabled -ComputersOnly 

Hấp dẫn! Tôi (rõ ràng) không biết về lệnh ghép ngắn đó. Thuộc tính nào được đo cho "AccountInactive"? cuối cùng? mật khẩu?
MDMarra

Tôi sẽ phải xem xét để chắc chắn 100%, nhưng tôi biết rằng Lastlogondate là một trong những thuộc tính được trả về nếu bạn nhìn vào đối tượng, passwordlastset thì không. Bài báo kỹ thuật không thực sự chi tiết thuộc tính nào nó sử dụng.
Mike

1
Nhìn vào nó nhiều hơn một chút và Lastlogondate có vẻ như nó chỉ là sự chuyển đổi của Lastlogontimestamp. Không có thuộc tính được gọi là lastlogondate trong lược đồ. Mong rằng sẽ giúp.
Mike

5

Máy tính thay đổi mật khẩu tài khoản của họ cứ sau 30 ngày theo mặc định. Nếu một máy tính không thay đổi mật khẩu trong một khoảng thời gian dài, điều đó có nghĩa là chúng không còn được kết nối với mạng.

Tập lệnh PowerShell này sẽ xuất ra 2 tệp văn bản. Một là cho các máy tính bị vô hiệu hóa, một là cho các đối tượng tài khoản máy tính mồ côi. Bạn phải cài đặt mô-đun Active Directory PowerShell.

Trong ví dụ này, tôi loại trừ OU "Máy tính xách tay được mã hóa", vì chúng là máy tính xách tay di động bị ngắt kết nối trong thời gian dài. Bạn có thể xóa phần đó nếu bạn không có thiết lập tương tự

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

Một triệu lời cảm ơn! Tôi muốn thêm tinh chỉnh của tôi vào đây. Tôi chỉ cần tìm các máy chủ đã bị vô hiệu hóa hoặc không bị vô hiệu hóa và không được sản xuất. Đây là những gì tôi nghĩ ra và nó dường như hoạt động.

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

Tôi biết OP rõ ràng đã yêu cầu PowerShell nhưng nếu bạn không thích nó, không có nó và không muốn tìm hiểu một cú pháp khác của Microsoft thì đoạn mã Python sau sẽ cung cấp cho bạn một ngày theo định dạng chính xác để sử dụng với truy vấn 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)

Mà sau đó có thể được sử dụng như sau để tìm tất cả các máy tính Windows đã không thay đổi mật khẩu của họ trong 90 ngày qua.

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

Có lẽ bạn chỉ cần 30 vì thời gian mặc định để các máy Windows thay đổi mật khẩu là 30 ngày nhưng 90 có vẻ an toàn hơn trong trường hợp bạn quên máy tính đó nằm bên dưới bàn của Bob và không bao giờ được bật.

EDIT: Ồ, tôi cũng đã bỏ qua hỗ trợ múi giờ trong trường hợp này có lẽ không quan trọng trong trường hợp sử dụng này nhưng có thể ở những người khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.