В небольших организациях, когда списывают компьютер, выводят из домена, а учетные записи не удаляют. Из-за таких действий появляется список компьютеров, которые скапливаются годами создавая неудобства. Для поиска таких компьютеров можно использовать штатную команду:
Get-ADComputer -Identity 'CL1'
Которая вернет:
DistinguishedName : CN=CL1,CN=Computers,DC=domain,DC=local
DNSHostName : cl1.domain.local
Enabled : True
Name : CL1
ObjectClass : computer
ObjectGUID : 91a78b7b-fae8-4f15-866d-e2d051fad1ac
SamAccountName : CL1$
SID : S-1-5-21-2105492826-702646196-2230886998-1103
UserPrincipalName :
В нашем случае нужно вернуть больше свойств. Для этого нужно указать ключ Properties:
Get-ADComputer -Identity 'CL1' -Properties *
AccountExpirationDate :
accountExpires : 9223372036854775807
AccountLockoutTime :
AccountNotDelegated : False
...
DistinguishedName : CN=CL1,OU=Domain Controllers,DC=domain,DC=local
DNSHostName : CL1.domain.local
...
KerberosEncryptionType : {RC4, AES128, AES256}
LastBadPasswordAttempt :
LastKnownParent :
lastLogoff : 0
lastLogon : 132129930895749474
LastLogonDate : 9/14/2019 11:18:09 AM
lastLogonTimestamp : 132129586898666176
...
whenCreated : 9/14/2019 11:17:29 AM
Теперь можно увидеть свойство LastLogonDate по которому мы поймем дату последнего использования учетной записи. Что бы узнать это свойство у всех компьютеров нужно использовать параметр Filter. Я так же укажу сервер, с которого будут запрашиваться объекты и привилегированную учетную запись. Осиротевший компьютер я считаю любым, который не использовался за последние 365 дней.
# Запрос учетных данных
$cred = Get-Credential
# Дата последнего использования учетной записи
$date = (Get-Date).AddDays(-365)
Get-ADComputer `
-Server AD1 `
-Credential $cred `
-Filter * `
-Properties LastLogonDate `
| Where-Object LastLogonDate -lt $date `
| Select-Object Name,LastLogonDate
Этот скрипт будет хорошо работать в каталогах маленького и среднего значения. Если каталог будет большим, то нужно использовать следующий вариант. Я так же экспортирую данные в CSV файл что бы еще раз проверить эти компьютеры перед удалением:
# Запрос учетных данных
$cred = Get-Credential
# Дата последнего использования учетной записи
$date = (Get-Date).AddDays(-365)
Get-ADComputer `
-Server AD1 `
-Credential $cred `
-Filter {LastLogonDate -lt $date} `
-Properties LastLogonDate `
| Select-Object Name,LastLogonDate `
| ConvertTo-CSV -NoTypeInformation > C:\oldpc.csv
В списке oldpc будут содержаться все компьютеры, у которых значение LastLogonDate больше года. Далее, с помощью Remove-Computer, удалим эти компьютеры:
Import-Csv -Path 'C:\oldpc.csv' | Remove-ADComputer
Если вы хотите убедиться в каждом удалении можно использовать параметр -Confirm. С этим параметром у вас будет запрашиваться каждое действие удаления.
...
Подписывайтесь на наш Telegram канал
Теги: #powershell #ad