Как найти учетные записи компьютеров, которые больше не нужны в AD
Я новичок в этой должности и считаю, что это структура AD нуждается в серьезной очистке. Учетных записей компьютеров в два раза больше, чем сотрудников, даже без учета серверов. Я хотел бы знать, какие из них все еще действительны, а какие можно удалить без последствий.
Я нашел инструмент от Joeware, OldComp, он выглядит довольно удобно, но я думаю, мне просто нужно немного больше понять, на что он смотрит... когда он ищет компьютеры старше 90 дней, значит ли это, что это было 90 дней с момента его подключения к сети? Причина этого в том, что я не хочу случайно отсоединить ноутбук от полевого офиса, который может находиться на полке в качестве резервной копии, думая, что это "старый" компьютер, хотя на самом деле он просто не подключен и используется в настоящее время. Может быть, не стоит беспокоиться о редком шансе, который может случиться, хотя...
Во всяком случае, если кто-то знает о каком-либо другом пути или имеет хороший пример того, как лучше всего это сделать, я был бы признателен за понимание. В результате я бы хотел избавиться от учетных записей компьютеров, которые больше не используются. Благодарю.
3 ответа
Oldcmp
хорошо известен тем, что он делает, и будет хорошо работать в первый раз и время от времени убирать.
Если со временем вам понадобится автоматизированный процесс, вы можете использовать Powershell (настоятельно рекомендуется), чтобы написать автоматизированный процесс для этого. Например, наш текущий скрипт выполняет следующие действия:
- Находит старые учетные записи на основе
lastLogonTimeStamp
с помощьюget-ADcomputer
- отключает их через 60 дней
- удаляет их через 90 дней
- Регистрирует все, что делает
Кроме того, мы используем флаг ProtectFromAccidentialDeletion в учетной записи, если мы не хотим, чтобы он был удален.
Не существует какого-либо метода, который позволил бы отличить ушедшую и уже не существующую машину от неиспользуемой и лежащей на полке, поэтому используйте OldComp для очистки и работайте с одноразовыми устройствами, если и когда они подходят.
Почему не PowerShell?
$Computers = ([ADSISearcher]"(&(objectCategory=computer)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))").FindAll()
$Computers = $Computers | ForEach { $_.Path }
$Age = $(Get-Date).AddDays(-90)
$StaleComputerAccounts = @()
$NeverUsedComputerAccounts = @()
ForEach ($Computer in $Computers) {
$ComputerObj = [ADSI]$Computer
if ($ComputerObj.lastLogon) {
$LastLogon = [DateTime]::FromFileTime($ComputerObj.ConvertLargeIntegerToInt64($ComputerObj.lastlogon[0]))
if ( $LastLogon -lt $Age ) {
$StaleComputerAccounts += $Computer
}
}
else {
$NeverUsedComputerAccounts += $Computer
}
}
Вы должны получить список $StaleComputerAccounts
а также $NeverUsedComputerAccounts
которыми вы можете манипулировать с помощью PowerShell. Мне нравится делать что-то вроде этого:
$TargetOU = "OU=Computers,OU=Disabled,OU=,DC=CONTOSO,DC=com"
$OUObj = [ADSI]"LDAP://$TargetOU"
ForEach ($Computer in $StaleComputerAccounts) {
$ComputerObj = [ADSI]$Computer
$ComputerObj.PSBase.MoveTo($OUObj)
$ComputerObj.InvokeSet("accountDisabled", $True)
$ComputerObj.SetInfo()
}
Не существует волшебного способа программно отличить компьютер, который был неправильно выведен из эксплуатации (никто не удалял его из Active Directory, когда он был отключен), и ноутбук, сидящий за столом какого-то руководителя. Если вы хотите двигаться осторожно, вы можете просто отключить учетную запись и отправить ее в определенную OU, как я.