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

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

我继承了这个愚蠢的命名惯例:

公司名称-城市20090724或者公司名称-城市-约翰

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

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

答案1

当然可以。在这种情况下,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 中创建一个组——说“计算机重命名完成”。
  • 修改组的权限以包括“域计算机 - 写入/添加自己为成员”
  • 在上面的简单的批处理文件脚本末尾添加以下行:
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

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

答案2

您可以通过 PowerShell 执行此操作。在 Excel 中,创建一个包含两列的文件,一列用于存储旧名称,一列用于存储新名称。添加标题行 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)
}

...核心代码来自这里

答案3

计算机从一个城市移到另一个城市,但名称并没有改变。

这是试图描述位置、所有者、功能等的命名方案的弱点。事情会改变的。因此,您最终要么经常重命名计算机(并且每次都重新启动!),要么拥有一个随着时间的推移而变得破旧的命名方案。

我可以建议描述字段替代文本 http://lh3.ggpht.com/BryanLockwood/SKbN8OdozVI/AAAAAAAAAVU/C3ZeLX0_wGc/%5C%5Ccojones.org%5Cfiles%5Cusers%5Cbryan%5CDesktop%5CComputerDescription.PNG?imgmax=512

您可以轻松列出计算机及其描述: 替代文本http://lh6.ggpht.com/BryanLockwood/SKbN8HBTywI/AAAAAAAAVc/vu65Fm4R5aM/%5C%5Ccojones.org%5Cfiles%5Cusers%5Cbryan%5CDesktop%5Ccmd-example-descriptions.PNG?imgmax=512

更多内容在我的博客上。

答案4

如果您不熟悉 Netdom 命令行工具,请尝试使用Netdom 重命名计算机 GUI聚居化

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

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

相关内容