Windows-Xp

如何重命名域中的多台電腦

  • February 22, 2015

我繼承了這個愚蠢的命名約定:

COMPANYNAME-CITY20090724COMPANYNAME-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

腳本可以一直執行,並且會不斷地重命名未根據服務標籤命名的電腦……呵呵。(我不確定我是否真的會這樣做,如果我這樣做了,我會在腳本中進行更多的理智檢查。)

引用自:https://serverfault.com/questions/44928