
我是這個職位的新手,發現它的 AD 結構需要認真清理。電腦帳戶的數量是員工數量的兩倍多,這還不包括伺服器。我想知道其中哪些仍然有效,哪些可以刪除而不會產生影響。
我從Joeware 找到了這個工具,OldComp,它看起來很方便,但我想我只是需要更多地了解它正在查看的內容......當它搜索超過90 天的計算機時,這是否意味著它已經90 天了自從插入網路以來有多少天了?背後的原因是,我不想無意中將一台筆記型電腦從現場辦公室中取出,該筆記型電腦可能放在架子上作為備份,認為它是一台「舊」計算機,而實際上它只是沒有插入並目前正在使用。也許不值得擔心,因為這種情況發生的可能性很小…
無論如何,如果有人知道任何其他方式或有一個很好的例子來說明如何最好地實現這一點,我將不勝感激。最終結果是我只是希望能夠擺脫不再使用的電腦帳戶。謝謝。
答案1
Oldcmp
以其功能而聞名,首次使用和偶爾清理時都可以正常工作。
如果隨著時間的推移,您想要一個自動化流程,您可以使用 Powershell(強烈建議)為此編寫一個自動化流程。例如,我們目前的腳本執行以下操作:
- 根據
lastLogonTimeStamp
使用情況尋找舊帳戶get-ADcomputer
- 60 天後禁用它們
- 90 天後刪除它們
- 記錄它所做的一切
此外,如果我們不想刪除帳戶,我們可以在帳戶上使用 ProtectFromAccidentialDeletion 標誌。
答案2
沒有任何方法能夠區分一台已消失且不再存在的機器和一台放在架子上未使用的機器,因此請使用 OldComp 進行清理並處理一次性問題,如果當他們出現時。
答案3
為什麼不使用 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。