Я новичок в этой должности и считаю, что структура AD нуждается в серьезной очистке. Компьютерных учетных записей вдвое больше, чем сотрудников, даже без учета серверов. Я хотел бы знать, какие из них все еще действительны, а какие можно удалить без каких-либо последствий.
Я нашел инструмент от Joeware, OldComp, он выглядит довольно удобным, но я думаю, мне просто нужно немного больше понять, на что он смотрит ... когда он ищет компьютеры старше 90 дней, означает ли это, что прошло 90 дней с момента подключения к сети? Причина этого в том, что я не хочу непреднамеренно отключать ноутбук от полевого офиса, который может быть на полке в качестве резервной копии, думая, что это «старый» компьютер, хотя на самом деле он просто не подключен и не используется в настоящее время. Может, не стоит волноваться из-за того редкого шанса, что это может случиться ...
В любом случае, если кто-то знает какой-либо другой способ или имеет хороший пример того, как лучше всего этого добиться, я был бы признателен за некоторое понимание. Конечным результатом является то, что я просто хочу избавиться от учетных записей компьютеров, которые больше не используются. Спасибо.
Oldcmp
хорошо известен тем, что он делает, и будет отлично работать при первой и периодической очистке.
Если со временем вам потребуется автоматизированный процесс, вы можете использовать Powershell (настоятельно рекомендуется), чтобы написать для этого автоматизированный процесс. Например, наш текущий скрипт делает следующее:
lastLogonTimeStamp
с помощью get-ADcomputer
Кроме того, мы используем флаг 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, когда он был отключен), и ноутбук, сидящий на столе какого-то руководителя. Если вы хотите действовать осторожно, вы можете просто отключить учетную запись и отправить ее в определенное подразделение, как я.