尝试通过netdom命令重命名计算机并强制重新启动

为什么这不工作? 它看起来像会但没有任何反应。

Option Explicit Dim wshNetwork Dim wshShell Dim PCname Dim Newname Set wshNetwork = WScript.CreateObject("WScript.Network") Set wshShell = WScript.CreateObject("WScript.Shell") PCname = InputBox("Type in the name of the pc you want to rename") Newname = InputBox("Type in the name of the new pc name") wshShell.run("netdom renamecomputer " &PCname& " /NewName:"&Newname& " /reboot:00 " ) 'MsgBox("netdom renamecomputer " &PCname& " /NewName:"&Newname& " /reboot:00 /y") 

我以前遇到过这个,而我知道如何通过PowerShell来做到这一点,如果你正在寻找VBS,你可能会想尝试一下。

取自http://www.wisesoft.co.uk/scripts/vbscript_rename_domain_computers_from_csv_file.aspx

 OPTION EXPLICIT CONST adOpenStatic = 3 CONST adLockOptimistic = 3 CONST adCmdText = &H0001 CONST intWindowStyle = 7 CONST blnWait = TRUE DIM strCSVFolder,strCSVFile,strNetDomParams DIM objShell,cn,rs ' ************** Setup ************** ' Folder where CSV File is located ' CSV file should have 1st field = oldname, 2nd field = newname with no header row strCSVFolder = "C:\Temp\" ' CSV filename strCSVFile = "test.csv" ' Additional parameters to pass to NetDom command strNetDomParams = " /userd:DOMAIN\ADMINISTRATOR /passwordd:PASSWORD /usero:DOMAIN\ADMINISTRATOR /passwordo:PASSWORD /force " '************************************ SET objShell = wscript.CREATEOBJECT("wscript.shell") ' Setup ADO Connection to CSV file SET cn = CREATEOBJECT("ADODB.Connection") SET rs = CREATEOBJECT("ADODB.Recordset") cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & strCSVFolder & ";" & _ "Extended Properties=""text;HDR=NO;FMT=Delimited""" rs.Open "SELECT * FROM [" & strCSVFile & "]", _ cn, adOpenStatic, adLockOptimistic, adCmdText DO until rs.eof DIM strOldName, strNewName, strCmd,intReturn strOldName = rs(0) strNewName = rs(1) strCmd = "cmd.exe /C netdom renamecomputer " & strOldName & " /newname:" & strNewName & strNetDomParams intReturn = objShell.Run(strCmd,intWindowStyle,blnWait) IF intReturn = 0 THEN wscript.echo "Renamed '" & strOldName & "' to '" & strNewName & "'" ELSE wscript.echo "Error renaming '" & strOldName & "' to '" & strNewName & "'" END IF rs.movenext LOOP 

抛出到cmd行总是一个痛苦(加上你必须确保netdom在那里),在VB中处理引号,什么不是。

只要去本地和使用WMI就可能更容易,作为奖金应该在任何地方工作。 这也将join一个域名(你可以删除那部分),但是你可以留下重命名部分和重启部分,你应该是好的。

这是我从另一个站点解除的未经testing的代码。

 Const JOIN_DOMAIN = 1 Const ACCT_CREATE = 2 Dim sCmpName Dim sUser, sPassword, sDomain, sOU sUser = "<domainuserid>" sPassword = "<domainpassword>" sDomain = "<mydomain>" sOU = "<ou=myou,dc=mydomain,dc=com>" sCmpName = InputBox("Enter the new computer name:", "Computer Name") If sCmpName = "" Then Wscript.Echo "Exiting script." Wscript.Quit End If Dim oWMI, oCmp, oOS, sReturn Set oWMI = GetObject("winmgmts:\\.\root\cimv2") For Each oCmp in oWMI.InstancesOf("Win32_ComputerSystem") sReturn = oCmp.Rename(sCmpName) If sReturn <> 0 Then Wscript.Echo "Rename failed. Error = " & Err.Number & _ vbcrlf & "Exiting script." Else Wscript.Echo "Rename successful." sReturn = oCmp.JoinDomainOrWorkgroup(sDomain, sPassword, _ sDomain & "\" & sUser, sOU, JOIN_DOMAIN+ACCT_CREATE) If sReturn <> 0 Then Wscript.Echo "Join domain failed. Error = " & Err.Number & _ vbcrlf & "Exiting script." Else Wscript.Echo "Join domain successful." End If Wscript.Echo "Rebooting computer..." For Each oOS in oWMI.InstancesOf("Win32_OperatingSystem") sReturn = oOS.Reboot Next End If Next 

如果您尝试部署VM映像:是否尝试运行sysprep ^( 1 )?! 这也迫使(据我所知)系统重置SID信息防止WSUS问题等等!