一般情況PC加入了AD的網域,便會在[Active Directory 使用者及電腦]裡面所屬的網域內[Computers]增加一台PC。但是往往,電腦壞了、人員離職了、系統重新安裝等等,大多不會乖乖的先登入網域,退出網域,再來做動作。
舉個例子來說,我們公司,實際電腦數約200多台,但[Computers]內的數目高達600多台,總不會要來個資產盤點,一一過濾,再來一一刪除,那會很累,而且不時的要做一次清查,粉累人,請教高手,有無好的解法。
例如:定時,清除高達60天未登入,或者有沒有啥工具可以看到,哪些機器高達60天未登入,然後給他砍掉。
花了點時間寫script,可以不用指定domain名稱,會把60天以上沒登入過的電腦停用,刪除其實也寫了,不過沒讓它執行,怕出問題。
此script請在dos模式下輸入:cscript 檔名.vbs
會看到哪些電腦已經被停用了,程式會先把電腦篩選出來才開始判斷,所以回到ad使用者及電腦的時候會看不到用戶、群組,請自行關閉篩選
PS.此程式無法判斷64位元的電腦,所以也會一併停用><
<pre class="c" name="code">on error resume next
Set objRootDSE = GetObject("LDAP://rootDSE")
Domain=objRootDSE.Get("defaultNamingContext")
Const ADS_SCOPE_SUBTREE = 2
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adUseClient = 3
Set AD_Connection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
AD_Connection.Provider = "ADsDSOObject"
AD_Connection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = AD_Connection
objCommand.Properties("Page Size") = 10000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = _
"SELECT sAMAccountName,cn,department,adspath FROM 'LDAP://"&domain&"' WHERE objectCategory='computer'"
Set ADRecordSet = objCommand.Execute
ADRecordSet.MoveFirst
Do Until ADRecordSet.EOF
strPath = ADRecordSet.Fields("AdsPath").Value
ComputerCN = ADRecordSet.Fields("CN").Value
'wscript.echo strpath
Set objPC = GetObject(strPath)
Set objLastLogon = objPC.Get("lastLogon")
intLastLogonTime = objLastLogon.HighPart * (2^32) + objLastLogon.LowPart
intLastLogonTime = intLastLogonTime / (60 * 10000000)
intLastLogonTime = intLastLogonTime / 1440
StrTime = intLastLogonTime + #1/1/1601#
dtmEndingDate = strTime
intDays = DateDiff("d", dtmEndingDate, Now)
If (intDays > 60) And (intDays < 90) Then
' 停用 60 天以上到 90 天內未登入的電腦帳戶
WScript.Echo "停用 " & ComputerCN & " " & strTime & " " & Intdays
objPC.AccountDisabled = True
objPC.SetInfo
ElseIf intDays > 90 Then
' 停用 90 天未登入的電腦帳戶
WScript.Echo "停用 " & ComputerCN & " " & strTime & " " & Intdays
objPC.AccountDisabled = True
objPC.SetInfo
' objPC.DeleteObject(0)
End If
ADRecordSet.MoveNext
Loop
AMS_cpf_cpyRecordset.Close
ADRecordSet.close
多久未登入就自動砍掉,就我所知好像沒有這種東西!
這邊僅能提供我們公司方法參考!
讓公司每台PC有統一的命名方式ex. AD帳號名_pc 或 AD帳號名_nb
如此一來當人員離職時,AD帳號一定會停用或刪除,此時就可以順便去砍 computer名稱!
至於join domain權限,建議不要給user,避免user自行重裝OS後,又變更hostname!
我提供一個非正規性的做法,但可以解決你的問題 "哪些機器高達60天未登入?"。
用WSUS,可知道哪些電腦有多久的時間未回覆狀態,再進一步去確認是否電腦真的沒人使用,最後再刪除電腦帳號!
救命阿
用了上面的SCRIPT後 我的AD 被停用了??? 要如何恢復阿???
到AD上,開啟"Active Directory 使用者及電腦",選擇被停用的DC的電腦名稱,按滑鼠右鍵,選擇"啟用"
ad怎會被停用???
DC 沒有啟用的按鈕耶~~DC 都使用遠端登入可能很久沒有本機登入
被鎖的是DC,鎖人的是AD,當然是在AD上開放回來啦
Domain controllers 裡面的電腦被停用,在物件上按右鍵沒有啟動的選項
那麻煩你把我寫的程式碼裡面的true這個字串改成false,然後再執行一次
呼~改成 false 在執行一次就恢復正常了停用一個多小時不知會不會有後遺症?
結論是:以後還是在VM上面測試比較保險
應該不會(還好你沒把刪除電腦那行指令開啟來)
在旁邊看都緊張起來了