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

我已经inheritance了这个愚蠢的名字约定:

COMPANYNAME-CITY20090724COMPANYNAME-CITY-JOHN

它没有告诉我任何有关的位置(地板,部门)。 约翰几个月前离开了公司。 一个城市的电脑转移到另一个城市,但名称并没有改变。

当你想创build一个新的命名约定时,如何重命名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 

一旦所有的计算机重新命名,你可以采取启动脚本。 在已经重命名的计算机上运行不应该太“昂贵”。 如果您担心可以使用“陷门”技术,脚本以计算机放置到被拒绝执行脚本的权限的组中。

  • 在AD中创build一个组 – 说“计算机重命名完成”。
  • 修改组的权限以包括“域计算机 – 写入/添加自己作为成员”
  • 在上面简单的batch file脚本中,最后添加一行:
 如果不是“%NEWNAME%”==“”NET GROUP“用户创build脚本完成”/ 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 

脚本可以一直运行,并会不断重命名没有根据其服务标签命名的计算机…嘿嘿。 (我不确定我是否真的这样做,如果我这样做,我会在脚本中进行更多的理智检查。)

你可以通过PowerShell来做到这一点。 在Excel中,创build一个两列的文件,一个用于旧名称,一个用于新名称。 添加标题行oldname和newname。 将其另存为CSV(mylist.csv),然后在powershell中运行:

 function renameAndReboot([string]$computer, [string]$newname) { $comp = gwmi win32_computersystem -computer $computer $os = gwmi win32_operatingsystem -computer $computer $comp.Rename($newname) $os.Reboot() } Import-Csv mylist.csv foreach ($entry in $list) { renameAndReboot($entry.oldname,$entry.newname) } 

核心代码来自这里 。

一个城市的电脑转移到另一个城市,但名称并没有改变。

这是试图描述位置,所有者,function等的命名scheme的弱点。 事情发生了变化 。 所以你最终要么经常重新命名计算机(并且每次重新启动!),要么随着时间的推移,命名scheme会变得失修。

我可以build议描述字段吗? alt text http://lh3.ggpht.com/BryanLockwood/SKbN8OdozVI/AAAAAAAAAVU/C3ZeLX0_wGc/%5C%5Ccojones.org%5Cfiles%5Cusers%5Cbryan%5CDesktop%5CComputerDescription.PNG?imgmax=512

您可以轻松地列出计算机及其描述: alt text http://lh6.ggpht.com/BryanLockwood/SKbN8HBTywI/AAAAAAAAAVc/vu65Fm4R5aM/%5C%5Ccojones.org%5Cfiles%5Cusers%5Cbryan%5CDesktop%5Ccmd-example-descriptions&#x3002; PNG?imgmax = 512

更多关于这个在我的博客。

如果您不熟悉Netdom命令行工具,请尝试使用colosify中的Netdom重命名计算机GUI 。

通过上传.csv文件,可以帮助您重命名域上的多台计算机,而无需记住或学习任何命令行代码或创build任何脚本。

这个GUI为我节省了很多时间。