reiniciar consola apagar c# join dns rename

consola - Renombra la computadora y únete al dominio con un reinicio en C#



reiniciar consola c# (1)

Intento crear un programa que nos facilite la implementación de nuevas computadoras en el dominio. Lo que quiero que haga, es simplemente cambiar el nombre de la computadora y unirla a nuestro dominio (va a hacer muchas otras cosas, pero esto no llegará hasta que lo haga funcionar).

Codifique aquí: http://pastebin.com/ayREYH0C

Robado de http://www.experts-exchange.com/Programming/Languages/.NET/Q_26262588.html y luego cambiado para adaptarse a mis necesidades

Mi problema es que la unión de dominio no respeta el cambio de nombre de la computadora. He puesto un Thread.Sleep entre el rename y el join, así que tuve algo de tiempo para comprobar si el cambio de nombre ocurre, ¡y lo hace! Cuando se produce el enlace de dominio, sin embargo, vuelve al antiguo nombre y ese es el nombre de computadora que se crea en el dominio, no el nuevo nombre.

He buscado por todos lados, pero no encontré un problema como este, ni una solución para esta necesidad en particular.


Aquí está la función ac # que une una estación de trabajo a un dominio ... pensé que podría encontrar uso de ella como un método alternativo que evita WMI y utiliza ManagementObject en su lugar:

(Me doy cuenta de que las credenciales de ejecución aún necesitan los derechos para cambiar el nombre)

public static bool Join(string dom,string usr, string pass) { // Define constants used in the method. int JOIN_DOMAIN = 1; int ACCT_CREATE = 2; int ACCT_DELETE = 4; int WIN9X_UPGRADE = 16; int DOMAIN_JOIN_IF_JOINED = 32; int JOIN_UNSECURE = 64; int MACHINE_PASSWORD_PASSED = 128; int DEFERRED_SPN_SET = 256; int INSTALL_INVOCATION = 262144; // Define parameters that we will use later when we invoke the method. // Remember, the username must have permission to join the object in the AD. //string domain = "domain"; //string password = "password"; //string username = "username"; //string destinationOU = "destinationOU"; // Here we will set the parameters that we like using the logical OR operator. // If you want to create the account if it doesn''t exist you should add " | ACCT_CREATE " // For more information see: http://msdn.microsoft.com/en-us/library/aa392154%28VS.85%29.aspx int parameters = JOIN_DOMAIN | DOMAIN_JOIN_IF_JOINED; // The arguments are passed as an array of string objects in a specific order object[] methodArgs = { dom, pass, usr + "@" + dom, null, parameters }; // Here we construct the ManagementObject and set Options ManagementObject computerSystem = new ManagementObject("Win32_ComputerSystem.Name=''" + Environment.MachineName + "''"); computerSystem.Scope.Options.Authentication = System.Management.AuthenticationLevel.PacketPrivacy; computerSystem.Scope.Options.Impersonation = ImpersonationLevel.Impersonate; computerSystem.Scope.Options.EnablePrivileges = true; // Here we invoke the method JoinDomainOrWorkgroup passing the parameters as the second parameter object Oresult = computerSystem.InvokeMethod("JoinDomainOrWorkgroup", methodArgs); // The result is returned as an object of type int, so we need to cast. int result = (int)Convert.ToInt32(Oresult); // If the result is 0 then the computer is joined. if (result == 0) { MessageBox.Show("Joined Successfully!"); return true; } else { // Here are the list of possible errors string strErrorDescription = " "; switch (result) { case 5: strErrorDescription = "Access is denied"; break; case 87: strErrorDescription = "The parameter is incorrect"; break; case 110: strErrorDescription = "The system cannot open the specified object"; break; case 1323: strErrorDescription = "Unable to update the password"; break; case 1326: strErrorDescription = "Logon failure: unknown username or bad password"; break; case 1355: strErrorDescription = "The specified domain either does not exist or could not be contacted"; break; case 2224: strErrorDescription = "The account already exists"; break; case 2691: strErrorDescription = "The machine is already joined to the domain"; break; case 2692: strErrorDescription = "The machine is not currently joined to a domain"; break; } MessageBox.Show(strErrorDescription.ToString()); return false; } }