Назад | Перейти на главную страницу

Как найти учетные записи компьютеров, которые больше не нужны в AD

Я новичок в этой должности и считаю, что структура AD нуждается в серьезной очистке. Компьютерных учетных записей вдвое больше, чем сотрудников, даже без учета серверов. Я хотел бы знать, какие из них все еще действительны, а какие можно удалить без каких-либо последствий.

Я нашел инструмент от Joeware, OldComp, он выглядит довольно удобным, но я думаю, мне просто нужно немного больше понять, на что он смотрит ... когда он ищет компьютеры старше 90 дней, означает ли это, что прошло 90 дней с момента подключения к сети? Причина этого в том, что я не хочу непреднамеренно отключать ноутбук от полевого офиса, который может быть на полке в качестве резервной копии, думая, что это «старый» компьютер, хотя на самом деле он просто не подключен и не используется в настоящее время. Может, не стоит волноваться из-за того редкого шанса, что это может случиться ...

В любом случае, если кто-то знает какой-либо другой способ или имеет хороший пример того, как лучше всего этого добиться, я был бы признателен за некоторое понимание. Конечным результатом является то, что я просто хочу избавиться от учетных записей компьютеров, которые больше не используются. Спасибо.

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, когда он был отключен), и ноутбук, сидящий на столе какого-то руководителя. Если вы хотите действовать осторожно, вы можете просто отключить учетную запись и отправить ее в определенное подразделение, как я.