Windows-Xp
如何重命名域中的多台電腦
我繼承了這個愚蠢的命名約定:
COMPANYNAME-CITY20090724或COMPANYNAME-CITY-JOHN
它沒有告訴我有關位置(樓層,部門)的任何資訊。約翰幾個月前離開了公司。一個城市的電腦搬到了另一個城市,但名字沒有改變。
當您想創建新的命名約定時,如何重命名 100 多台電腦?
肯定的事。在這種情況下,NETDOM 實用程序是“你的朋友”。您可以使用啟動腳本重命名電腦。
NETDOM 上的一些文件在這裡:
我可以看到這樣一個非常簡單的腳本:
@echo off IF "%COMPUTERNAME%"=="COMPANYNAME-CITY-JOHN" SET NEWNAME=NEWNAME-HERE IF "%COMPUTERNAME%"=="COMPANYNAME-CITY-BOB" SET NEWNAME=NEWNAME-HERE2 ... more machines ... IF NOT "%NEWNAME%"=="" NETDOM renamecomputer member /newname:%NEWNAME% /userd:USER-TO-PERFORM-RENAME-UNDER /password:PASSWORD-FOR-THAT-USER
重命名所有電腦後,您可以刪除啟動腳本。在已經重命名的電腦上執行它不應該太“昂貴”。如果您擔心這一點,您可以使用“trapdoor”技術,即腳本以電腦將自己置於一個被拒絕執行腳本的權限的組中結束。
- 在 AD 中創建一個組——說“電腦重命名完成”。
- 修改組的權限以包括“域電腦 - 寫入/將自己添加為成員”
- 在上面的簡單批處理文件腳本中,在末尾添加以下行:
IF NOT "%NEWNAME%"=="" NET GROUP "使用者創建腳本完成" /DOMAIN /ADD %COMPUTERNAME%$
當它在每台機器上執行時,您會看到該組“增長”了成員電腦。要阻止腳本在已經執行的電腦上執行,請向 GPO 添加一個權限,該權限分配啟動腳本“電腦重命名完成 - 拒絕應用組策略”。然後腳本將在每台機器上執行一次。
你的目的地名稱是什麼?如果您像我一樣喜歡戴爾服務編號,您可以執行以下操作(在 VBScript 中):
Option Explicit Dim objWMIService, strNewName, objShell, objNetwork Set objShell = CreateObject("WScript.Shell") Set objNetwork = CreateObject("WScript.Network") ' Obtain the service tag Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") For Each objSMBIOS in objWMIService.ExecQuery("SELECT * FROM Win32_SystemEnclosure") strNewName = objSMBIOS.SerialNumber Next ' Check for empty string If (strNewName = "") Then WScript.Quit ' Does the computer need to be renamed? If (UCase(strNewName) <> UCase(objNetwork.ComputerName)) Then objShell.Run "NETDOM renamecomputer member /newname:" & strNewName & " /userd:USER-TO-PERFORM-RENAME-UNDER /password:PASSWORD-FOR-THAT-USER" End If
該腳本可以一直執行,並且會不斷地重命名未根據服務標籤命名的電腦……呵呵。(我不確定我是否真的會這樣做,如果我這樣做了,我會在腳本中進行更多的理智檢查。)