如何重命名域中的多台计算机

Jin*_*ich 2 active-directory windows-xp windows-vista

我继承了这个愚蠢的命名约定:

COMPANYNAME-CITY20090724COMPANYNAME-CITY-JOHN

它没有告诉我有关位置(楼层、部门)的任何信息。约翰几个月前离开了公司。计算机从一个城市搬到另一个城市,但名称没有改变。

当您想创建新的命名约定时,如何重命名 100 多台计算机?

Eva*_*son 5

肯定的事。在这种情况下,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
Run Code Online (Sandbox Code Playgroud)

重命名所有计算机后,您可以将启动脚本拿走。在已经重命名的计算机上运行应该不会太“昂贵”。如果您担心,您可以使用“trapdoor”技术,即脚本以计算机将自己置于一个被拒绝执行脚本的权限的组中结束。

  • 在 AD 中创建一个组 - 说“计算机重命名完成”。
  • 修改组的权限以包括“域计算机 - 写入/将自己添加为成员”
  • 在上面简单的批处理文件脚本中,在末尾添加以下行:
如果不是 "%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
Run Code Online (Sandbox Code Playgroud)

脚本可以一直运行,并且会不断重命名未根据服务标签命名的计算机......呵呵。(我不确定我是否真的会这样做,如果我这样做了,我会在脚本中进行更多的完整性检查。)