一般更改计算机的方法是:右击“我的电脑属性”—“计算机名选项”—“更改”,输入新的计算机名,在计算机规模不是很大的情况下,我们可以这样更改,如果计算机数量超过一定规模例如500台,或许我们应该思考是否有更为便捷的方法做到,以这里的环境为例,公司客户端计算机有2000多台,分成两类,一类为办公网:可以访问外网;一类为业务网只能访问内部网络。已经部署了域,在一次整改会上提到现有的计算机名不够规范,存在在遇到问题时不能准确定位计算机的位置,要求行政人员制定统一的座位标签,与之对应IT人员部署统一计算机名,计算机名和IP绑定,通过计算机名能迅速判断计算机在哪个部门,几楼,遇到风险案件也能迅速调用那里的摄像头查看,当然我这里的重点是谈到更改计算机名的方法:

1.先在AD域控服务器上建立一个备用管理员账号

2.将修改计算机名脚本放入共享文件夹内并设为共享,然后制作共享映射脚本,通过域策略制定用户登陆脚本即可。

共享映射脚本请看另一博文http://wuxiaohui.blog.51cto.com/697989/514796

3.在客户端用备用域管理员登陆到域,直接访问映射盘运行修改计算机名脚本,输入新的计算机名即可(可能会有人问这还是需要手动一台台区改,的确如此,我想这个是无法考程序完成。另外加入所有计算机为工作组模式,需要部署域的情况下也是需要全部修改计算机名的,但在工作模式下如何能充分利用这一便利性也是一个思考的方向)如图:

 

 

脚本如下:

'本脚本需要管理员(本机管理员或域管理员均可)权限方可正常执行。
'本脚本需开启WSH/WMI组件,一般计算机默认开启。
'本脚本在第一次修改计算机名成功后,再次执行无效;必须重启计算机后方可再次执行生效。

'定义变量
Dim Hostname

'打开关闭错误调试
On Error Resume Next

'Get Computer/User Name, init objects
Set objWSH = CreateObject("WScript.Shell")
Set objWshNetwork = CreateObject("WScript.Network")
strComputerName = objWshNetwork.ComputerName
strUserName = objWshNetwork.UserName
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputerName & "\root\cimv2")

'弹出对话框,输入需要修改的计算机名
Hostname = Inputbox ("当前计算机名为:" & strComputerName & vbCr & vbCr _
         & "请输入正确的计算机名" & vbCr & vbCr _
         & "请勿包含 ` ~ ! @ # $ * ? 等非法字符","修改计算机名")
'转换为大写字母
Hostname = UCase(Hostname)
If Hostname = "" Then
   MsgBox "请输入正确的计算机名"
Elseif   Hostname = strComputerName Then
   MsgBox "输入的值与原计算机名相同,请重新输入正确的值"
Else
 '修改计算机名
 Set colComputers = objWMIService.ExecQuery _
  ("Select *from Win32_ComputerSystem")
 For Each objComputer in colComputers
   ObjComputer.Rename(Hostname)
 Next

 strHostNameKey = "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName\ComputerName"
 strHostName = objWSH.Regread(strHostNameKey)

 '判断注册表键值中已修改的计算机名与原计算机名是否相同,相同则表示未修改成功
 If  strHostName = strComputerName Then
   MsgBox ("原计算机名:" & strComputerName & ",等同于现计算机名:" & strHostName & vbCr _
      & vbCr &"# 计算机名未修改成功,请检查:" & vbCr _
      & "   1) 当前用户是否有管理员权限。" & vbCr _
      & "   2) 输入的计算机名是否正确合法。" & vbCr _
      & "   3) WMI服务是否正常。" & vbCr _
      & vbCr & "# WMI服务异常可尝试如下方法处理:" & vbCr _
      & "   a) 关闭并停止 Windows Management Instrumentation 服务。" & vbCr _
      & "   b) 然后删除 %SystemRoot%\System32\Wbem\Repository 文件夹中的所有文件。" & vbCr _
      & "   c) 重新启动 Windows Management Instrumentation 服务。" & vbCr _
      & vbCr & "# 或者重启计算机后再次执行该脚本")
 Else
  '否则表示已经修改成功,提示重启计算机
  reboot = MsgBox("原计算机名:" & strComputerName & ",已修改为:" & strHostName & _
     vbCr & vbCr &"* 请确认是否修改成功,点击“是”立即重启计算机;"& vbCr _
     &"* 或者点击“否”,稍后重启",vbYesNo)
  If reboot = vbYes Then
   Set OpSysSet = _
    GetObject("winmgmts:{(Shutdown)}").ExecQuery("select * from Win32_OperatingSystem where Primary=true")
      For Each OpSys In OpSysSet
       OpSys.Reboot()
     Next
  Else
    MsgBox "如果计算机名更改成功,请您尽快重启计算机,以使修改生效。"
  End If
 End If
End If