iT邦幫忙

0

AD裡面,如何自動移除已不存在的PC

ad

一般情況PC加入了AD的網域,便會在[Active Directory 使用者及電腦]裡面所屬的網域內[Computers]增加一台PC。但是往往,電腦壞了、人員離職了、系統重新安裝等等,大多不會乖乖的先登入網域,退出網域,再來做動作。
舉個例子來說,我們公司,實際電腦數約200多台,但[Computers]內的數目高達600多台,總不會要來個資產盤點,一一過濾,再來一一刪除,那會很累,而且不時的要做一次清查,粉累人,請教高手,有無好的解法。
例如:定時,清除高達60天未登入,或者有沒有啥工具可以看到,哪些機器高達60天未登入,然後給他砍掉。

這個問題我也很想知道答案,雖然我都是慢慢刪,但應該還有其他更好的辦法吧(我猜)!
fpchen iT邦新手 1 級 ‧ 2008-12-19 09:41:54 檢舉
我也想知道
zanhsieh iT邦新手 4 級 ‧ 2008-12-19 11:43:08 檢舉
剛要回就看到有人寫了。看來他的方法比較好。我的就放在討論參考就好了。

用軟體的:

http://www.specopssoft.com/products/adjanitor/

整理出超過90天以上未登入帳號讓您選擇並刪除。

另一種 cscript 寫的:

http://www.tech-archive.net/Archive/Win2000/microsoft.public.win2000.group_policy/2004-04/0395.html
42
tom6507
iT邦大師 1 級 ‧ 2008-12-19 11:30:51
最佳解答

花了點時間寫script,可以不用指定domain名稱,會把60天以上沒登入過的電腦停用,刪除其實也寫了,不過沒讓它執行,怕出問題。
此script請在dos模式下輸入:cscript 檔名.vbs
會看到哪些電腦已經被停用了,程式會先把電腦篩選出來才開始判斷,所以回到ad使用者及電腦的時候會看不到用戶、群組,請自行關閉篩選
PS.此程式無法判斷64位元的電腦,所以也會一併停用><

&lt;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 &lt; 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
看更多先前的回應...收起先前的回應...
hsien231 iT邦新手 5 級 ‧ 2008-12-22 16:14:12 檢舉

救命阿
用了上面的SCRIPT後 我的DC 被停用了??? 要如何恢復阿???

tom6507 iT邦大師 1 級 ‧ 2008-12-22 16:55:24 檢舉

到AD上,開啟"Active Directory 使用者及電腦",選擇被停用的DC的電腦名稱,按滑鼠右鍵,選擇"啟用"

tom6507 iT邦大師 1 級 ‧ 2008-12-22 17:15:21 檢舉
hsien231 iT邦新手 5 級 ‧ 2008-12-22 17:24:38 檢舉

一般PC可以按啟用,Domain controllers 裡面的電腦沒有啟用的選單

28
小湯
iT邦研究生 5 級 ‧ 2008-12-18 17:16:24

多久未登入就自動砍掉,就我所知好像沒有這種東西!
這邊僅能提供我們公司方法參考!
讓公司每台PC有統一的命名方式ex. AD帳號名_pc 或 AD帳號名_nb
如此一來當人員離職時,AD帳號一定會停用或刪除,此時就可以順便去砍 computer名稱!
至於join domain權限,建議不要給user,避免user自行重裝OS後,又變更hostname!

ahwachen iT邦新手 4 級 ‧ 2008-12-18 18:10:20 檢舉

依人名為電腦命名,此法也曾用過,但太辛苦,每換一個人,電腦就要更名,再加入網域.
再說,很多公司,電腦都是共用的,看誰登入,就用誰的帳號,所以,大多常用的做法,會用C001,C002之類的方式為資產命名,單位不同,就前面的代碼不一樣.也比較好控管資產.

22
old7ada
iT邦研究生 2 級 ‧ 2008-12-19 10:05:10

我提供一個非正規性的做法,但可以解決你的問題 "哪些機器高達60天未登入?"。
用WSUS,可知道哪些電腦有多久的時間未回覆狀態,再進一步去確認是否電腦真的沒人使用,最後再刪除電腦帳號!

20
dl8021
iT邦新手 4 級 ‧ 2008-12-19 11:10:47

建議還是要結合資產管理流程,這部份要管理得好,很多基本功是免不了的吧

14
hsien231
iT邦新手 5 級 ‧ 2008-12-22 16:03:37

救命阿
用了上面的SCRIPT後 我的AD 被停用了??? 要如何恢復阿???

看更多先前的回應...收起先前的回應...
tom6507 iT邦大師 1 級 ‧ 2008-12-22 16:55:38 檢舉

到AD上,開啟"Active Directory 使用者及電腦",選擇被停用的DC的電腦名稱,按滑鼠右鍵,選擇"啟用"

tom6507 iT邦大師 1 級 ‧ 2008-12-22 16:56:44 檢舉

ad怎會被停用???

hsien231 iT邦新手 5 級 ‧ 2008-12-22 17:00:55 檢舉

DC 沒有啟用的按鈕耶~~DC 都使用遠端登入可能很久沒有本機登入

tom6507 iT邦大師 1 級 ‧ 2008-12-22 17:08:23 檢舉

被鎖的是DC,鎖人的是AD,當然是在AD上開放回來啦

hsien231 iT邦新手 5 級 ‧ 2008-12-22 17:11:09 檢舉

Domain controllers 裡面的電腦被停用,在物件上按右鍵沒有啟動的選項

tom6507 iT邦大師 1 級 ‧ 2008-12-22 17:34:09 檢舉

那麻煩你把我寫的程式碼裡面的true這個字串改成false,然後再執行一次

hsien231 iT邦新手 5 級 ‧ 2008-12-22 17:45:56 檢舉

呼~改成 false 在執行一次就恢復正常了停用一個多小時不知會不會有後遺症?

wordsmith iT邦高手 1 級 ‧ 2008-12-22 17:54:25 檢舉

結論是:以後還是在VM上面測試比較保險

tom6507 iT邦大師 1 級 ‧ 2008-12-22 17:54:33 檢舉

應該不會(還好你沒把刪除電腦那行指令開啟來)

wordsmith iT邦高手 1 級 ‧ 2008-12-22 17:54:43 檢舉

在旁邊看都緊張起來了

tom6507 iT邦大師 1 級 ‧ 2008-12-22 17:55:23 檢舉

我都拿來run在有3000多台電腦的AD上了

hsien231 iT邦新手 5 級 ‧ 2008-12-22 18:06:03 檢舉

再多加個判斷 , 不要把DC列入掃描範圍就很讚了~~

bobhsieh iT邦新手 3 級 ‧ 2008-12-22 22:13:42 檢舉

可不可以只列出清單就好?不要做停用的動作。

我要發表回答

立即登入回答