Cambie el nombre del equipo y únase al dominio en un solo paso con PowerShell
Objetivo: En un equipo con Windows Server 2008 R2, use PowerShell 2.0 para:
- Cambiar el nombre de la computadora
- Unir el equipo a un dominio
Condición: Los pasos 1 y 2 deben realizarse juntos, es decir, sin reiniciar el equipo entre ellos
Funciones Que estoy usando
Estas son las funciones de PowerShell que he creado para cada paso.
Cambiar el nombre de la computadora
Según mi investigación en Internet, PowerShell 2.0 en un punto antes del lanzamiento tenía un cmdlet integrado llamado Rename-Computer, pero se eliminó por razones desconocidas en CTP 3. Mi versión usa WMI.
function Rename-Computer
{
param ( [Parameter(Mandatory=$true)][string]$name )
process
{
try
{
$computer = Get-WmiObject -Class Win32_ComputerSystem
$result = $computer.Rename($name)
switch($result.ReturnValue)
{
0 { Write-Host "Success" }
5
{
Write-Error "You need administrative rights to execute this cmdlet"
exit
}
default
{
Write-Host "Error - return value of " $result.ReturnValue
exit
}
}
}
catch
{
Write-Host "Exception occurred in Rename-Computer " $Error
}
}
}
Unir equipo al Dominio
Como puede ver, esta función es realmente solo un contenedor para el cmdlet incorporado Add-Computer que recopila el nombre de dominio y crea algunas credenciales para usar.
function Join-ComputerToDomain
{
param ( [Parameter(Mandatory=$true)][string]$domain )
process
{
try
{
$_domainCredential = $Host.UI.PromptForCredential("Enter domain credentials", "Enter domain credentials to be used when joining computer to the domain", "", "NetBiosUserName")
Add-Computer -DomainName $_domain -cred $_domainCredential
}
catch
{
Write-Error "Exception occurred in Join-ComputerToDomain " $Error
}
}
}
Pasos Que he probado
Intento 1
- Call Rename-Computer
- Llamar Join-ComputerToDomain
- Reiniciar
Resultado: La salida de Rename-Computer indica que se cambió el nombre, pero después del reinicio, name no cambió, pero computer se unió al dominio
Intento 2
- Call Join-ComputerToDomain
- Call Rename-Computer
- Reiniciar
Resultado: El valor devuelto por Rename-Computer es 1326 (Error de inicio de sesión: nombre de usuario desconocido o mal contraseña). Supongo que esto se debe a que se requieren credenciales de dominio para el cambio de nombre una vez que se une al dominio. Intenté usar credenciales con la llamada Get-WmiObject en Rename-Computer, pero lanzó un error sobre no poder usar diferentes credenciales en el sistema local.
Intento 3
- Call Rename-Computer
- Reiniciar
- Call Join-ComputerToDomain
- Reiniciar
Resultado: Todo funciona como esperado, pero se requiere reinicio adicional. Funciona pero quiero eliminar el reinicio en el paso 2.
16 answers
Simplemente puede usar Add-Computer, hay un parámetro para" - NewName "
Ejemplo: Add-Computer -DomainName MYLAB.Local -ComputerName TARGETCOMPUTER -newname NewTARGETCOMPUTER
Es posible que desee comprobar también el parámetro "-OPTIONS"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-03 03:31:15
Esta solución está funcionando:
- Introduzca el equipo en el dominio de Active Directory con autenticación (sin reiniciar)
- Cambie el nombre del equipo con autenticación (sin reiniciar)
- después, Reinicie
En el código:
# get the credential
$cred = get-credential
# enter the computer in the right place
Add-Computer -DomainName EPFL -Credential $cred -OUPath "...,DC=epfl,DC=ch"
# rename the computer with credential (because we are in the domain)
$Computer = Get-WmiObject Win32_ComputerSystem
$r = $Computer.Rename("NewComputerName", $cred.GetNetworkCredential().Password, $cred.Username)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-21 11:33:11
En realidad hay varias razones por las que tiene que reiniciar después de cambiar el nombre de un equipo, o al unirse a un dominio (que es básicamente la misma operación con la validación por AD). Uno es que en los equipos basados en NT (creo que esto comenzó con Windows 2000), la Aplicación y los servicios de red leen el nombre del equipo cuando se inician. Que es el solo tiempo que leen el nombre de la computadora, por lo que si tuviera que cambiar el nombre de la computadora sin reiniciar, la red y la aplicación los servicios no responderían al nuevo nombre del equipo. Esto se vuelve particularmente importante cuando primero cambia el nombre del equipo y luego intenta unirse a un dominio, ya que el apretón de manos kerberos no se puede completar sin que la pila de red responda al nombre correcto del equipo.
Otra razón es que varias claves del registro hacen uso del nombre del equipo, y esas claves no se pueden cambiar mientras se cargan en la memoria (esto es incidentalmente también por qué algunos programas requieren un reinicio para instalación o desinstalación completa).
Puede usar la clave del registro RunOnce (msdn.microsoft.com/en-us/library/aa376977%28v=vs.85%29.aspx) para ejecutar su dominio unirse script automáticamente al reiniciar, pero usted todavía va a tener que reiniciar para ambas operaciones.
Si realmente quería ser complicado, podría agregar algún código a su script de cambio de nombre que establecería la clave de registro de RunOnce para iniciar el script de unión de dominio al reiniciar. Sin embargo, tenga en cuenta si va a hacer esto, que el script que escribirá en la colmena HKLM debe ejecutarse como administrador (especialmente importante si tiene UAC activado).
Si quieres hacer eso, usarías algo como esto al final de tu función Rename-Computer:
Set-Location -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce'
Set-ItemProperty -Path . -Name joinDomain -Value "C:\scripts\joinDomain.ps1"
Restart-Computer
Esto creará una subclave en la clave del registro RunOnce (suponiendo que esté ejecutando Vista/7/2008) llamada "joinDomain" con el valor de "C:\scripts\joinDomain.ps1"
Si eso no funciona para usted, intente cambiar la segunda línea a esto:
Set-ItemProperty -Path . -Name joinDomain -Value 'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe "C:\scripts\joinDomain.ps1"'
Hazme saber si tienes problemas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-10 06:29:53
Pude realizar ambas tareas con un reinicio utilizando el siguiente método y funcionó con los siguientes indicadores JoinDomainOrWorkGroup. Esta fue una nueva construcción y el uso de Windows 2008 R2 Enterprise. He verificado que se crea la cuenta de la computadora, así como en el ANUNCIO con el nuevo nombre.
1 (0x1) Predeterminado. Une un equipo a un dominio. Si no se especifica este valor, la unión es un equipo a un grupo de trabajo
32 (0x20) Permite unirse a un nuevo dominio, incluso si el equipo está ya se ha unido a un dominio
$comp=gwmi win32_computersystem
$cred=get-credential
$newname="*newcomputername*"
$domain="*domainname*"
$OU="OU=Servers, DC=domain, DC=Domain, DC=com"
$comp.JoinDomainOrWorkGroup($domain ,($cred.getnetworkcredential()).password, $cred.username, $OU, 33)
$comp.rename($newname,$cred.getnetworkcredential()).password,$cred.username)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-28 21:19:16
Estaba buscando lo mismo hoy y finalmente conseguí una manera de hacerlo. Se me insinuó que era posible debido al uso de sconfig, que te pregunta si quieres cambiar el nombre del equipo después de unirlo a un dominio. Aquí está mi línea de código en bruto. Podría ser mejorado, pero a cansado de pensar en ello por ahora.
$strCompName = Read-host 'Name '
$strAdmin = read-host "Authorized user for this operation "
$strDomain = read-host "Name of the domain to be joined "
add-computer -DomainName $strDomain -Credential $strAdmin
Rename-computer -newname $strCompName -DomainCredential $strAdmin
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-22 02:20:03
Las opciones JoinWithNewName en Add-Computer pueden hacer este trabajo .
Join JoinWithNewName: Cambia el nombre del equipo en el nuevo dominio al nombre especificado por el parámetro NewName. Cuando se utiliza el parámetro NewName, esta opción se establece automáticamente. Esta opción está diseñada para usarse con el cmdlet Rename-Computer. Si usa el cmdlet Rename-Computer para cambiar el nombre del equipo, pero no lo reinicia para que el cambio sea efectivo, puede usar este parámetro para unirse el equipo a un dominio con su nuevo nombre.
$oldName = Read-Host -Prompt "Enter Original Computer Name"
$newName = Read-Host -Prompt "Enter New Computer Name"
$domain = Read-Host -Prompt "Enter Domain Name to be added"
$user = Read-Host -Prompt "Enter Domain user name"
$password = Read-Host -Prompt "Enter password for $user" -AsSecureString
$username = "$domain\$user"
$credential = New-Object System.Management.Automation.PSCredential($username,$password)
Rename-Computer -NewName $newName -LocalCredential admin -Force
Write-Host "Please waiting for a moment to change Domain and then restart" -ForegroundColor Red
Add-Computer -ComputerName $oldName -DomainName $domain -Options JoinWithNewName -Credential $credential -Restart
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-14 02:38:15
Como nadie responde, intento algo:
Creo que entiendo por qué Attent one no funciona. Se debe a que unir un equipo a un dominio de alguna manera también significa cambiar el nombre del equipo (la parte del nombre de dominio, ingrese el nombre del equipo).
Así que intenta hacerlo de manera completa WMI, tienes un método en la clase Win32_ComputerSystem
llamado JoinDomainOrWorkgroup
. Hacerlo en el mismo nivel tal vez le da más oportunidad de hacer que funcione.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-03 14:42:29
Rename-Computer se eliminó de CTP3 porque hay muchas cosas que se hacen al cambiar el nombre de un equipo y MS no quería recrear ese proceso o no podía incluir todos los bits necesarios. Creo que Jefferey Snover dijo que usáramos netdom.exe en su lugar, ya que es la mejor práctica para cambiar el nombre de un equipo en la línea de comandos. No es la respuesta que estabas buscando, pero debería indicarte en la dirección correcta
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-07 22:28:24
Si primero crea la cuenta de la máquina en el DC, puede cambiar el nombre y unirse al dominio en un reinicio.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-10 22:07:41
Me gustaría ofrecer lo siguiente que funcionó de forma automatizada para mí. Muestra la secuencia de pasos y la relación entre establecer el nombre primero y luego unirse al dominio. Uso esto en un script como punto de orquestación para Win2008r2 y win2012r2 a través de Scalr CMP para EC2 y Openstack cloud instances.
$userid="$DOMAIN\$USERNAME"
$secure_string_pwd = convertto-securestring "SECRET_PASSWORD" -asplaintext -force
$creds = New-Object System.Management.Automation.PSCredential $userid,$secure_string_pwd
Rename-Computer "newhostname" -DomainCredential $creds -Force
WARNING: The changes will take effect after you restart the computer OLDHOSTNAME.
Add-Computer -NewName "newhostname" -DomainName $DOMAIN -Credential $creds \
-OUPath "OU=MYORG,OU=MYSUBORG,DC=THEDOMAIN,DC=Net" -Force
WARNING: The changes will take effect after you restart the computer OLDHOSTNAME.
Restart-Computer
Una advertencia es tener cuidado con las credenciales, extraerlas de un almacén de claves en lugar de codificarlas como se ilustra aquí ... pero eso es diferente tema.
Gracias a todos por sus respuestas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-11 16:27:13
Esto solicitará el nombre del equipo y se unirá al dominio y luego reiniciará.
$computerName = Get-WmiObject Win32_ComputerSystem
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null
$name = [Microsoft.VisualBasic.Interaction]::InputBox("Enter Desired Computer Name ")
$computername.rename("$name")
Add-Computer -DomainName [domainname] -Credential [user\domain] -Verbose
Restart-Computer
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-20 05:37:04
También agregue una cuenta local + cambie el nombre del equipo en el aviso + únase al dominio en promt
#Set A local admin account
$computername = $env:computername # place computername here for remote access
$username = 'localadmin'
$password = 'P@ssw0rd1'
$desc = 'Local admin account'
$computer = [ADSI]"WinNT://$computername,computer"
$user = $computer.Create("user", $username)
$user.SetPassword($password)
$user.Setinfo()
$user.description = $desc
$user.setinfo()
$user.UserFlags = 65536
$user.SetInfo()
$group = [ADSI]("WinNT://$computername/administrators,group")
$group.add("WinNT://$username,user")
# Set computer name
$computerName = Get-WmiObject Win32_ComputerSystem
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null
$name = [Microsoft.VisualBasic.Interaction]::InputBox("Enter Desired Computer Name ")
$computername.rename("$name")
#Now Join to Domain
Add-Computer -DomainName [domainname] -Credential [user\domain] -Verbose
Restart-Computer
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-20 05:46:26
Tengo un código probado para unir dominio y renombrar el equipo a servicetag.
Código:
$servicetag = Get-WmiObject win32_bios | Select-Object -ExpandProperty SerialNumber
Add-Computer -Credential DOMAIN\USER -DomainName DOMAIN -NewName $servicetag
DOMAIN\USER
= editar en un usuario del dominio que puede unir equipos al dominio. Ejemplo:
mydomain\admin
DOMAIN
= edite el dominio al que desea unirse. Ejemplo:
mydomain.local
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-15 10:25:40
En un solo paso con credenciales de administrador:
Add-Computer -DomainName xxxx -ComputerName xxxx -NewName xxxx -Credential Domain\Admin -Restart
- DomainName = Su nombre de dominio (por ejemplo, corp.local)
-ComputerName = Nombre de su equipo local (por ejemplo, el equipo en el que se encuentra. Use "Hostname" en PS para averiguar el nombre).
- NewName = Lo que desea cambiar el nombre de la computadora (por ejemplo, CORP-ANNE-TX)
-Credentials = Sus credenciales de administrador que le dan autorización para realizar esta acción (por ejemplo, Domain\Admin = example Corp\JSmith. Aparecerá un cuadro de diálogo para poner en su contraseña)
En dos pasos:
Paso 1
Rename-Computer -NewName xxxx -Restart
Aquí no tiene que poner-ComputerName ya que asume que está en el equipo local. Si hacer esto remotamente; historia diferente.
Paso 2
Add-Computer -DomainName xxxx -Credential xxxx\xxxxx -Restart
Xxxx \ xxxx = Su dominio y nombre de usuario de administrador (por ejemplo, Corp\Jsmith)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-08 15:54:16
Aquí hay otra manera de hacer con "Nombre de Equipo/Cambio de Dominio" Ventanas de Propiedades del Sistema.
En otras palabras, abra la pestaña Propiedades del sistema| Nombre del equipo y luego haga clic en Cambiar usando powershell. Es un enfoque diferente, es útil en mi situación y podría ser útil para alguien más.
Add-type-AssemblyName microsoft.VisualBasic add-type-AssemblyName Sistema.Windows.Formularios
SystemPropertiesComputerName start-sleep –Segundos 1
[Microsoft.VisualBasic.Interacción]:: AppActivate ("Propiedades del sistema")
[Sistema.Windows.Forma.SendKeys]:: SendWait ("{TAB}") start-sleep –Segundos 1
[Sistema.Windows.Forma.SendKeys]:: SendWait ("{ENTER}")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-08 05:54:22
$domain = "domain.local"
$password = "Passw@rd" | ConvertTo-SecureString -asPlainText -Force
$username = "$domain\Administrator"
$hostname=hostname
$credential = New-Object System.Management.Automation.PSCredential($username,$password)
Add-Computer -DomainName $domain -ComputerName $hostname -NewName alrootca -Credential $credential -Restart
Funciona para mí ^^
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-23 05:58:09