using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Management; using System.Xml; using System.Xml.Schema; using Microsoft.SqlServer.Management.Smo; using Microsoft.SqlServer.Management.Common; using System.Data.SqlTypes; using System.Data.SqlClient; using System.Threading; namespace Image_Tool { public partial class Form1 : Form { string newpcname = ""; string oldpcname = ""; public Form1() { InitializeComponent(); textBoxOldPCNavn.Text = Environment.MachineName; oldpcname = Environment.MachineName; } public void buttonDomain_Click(object sender, EventArgs e) { newpcname = textBoxPCNavn.Text + "PC"; HandleJoinandRenameDomain("domain.local", newpcname, domainUser.Text, domainPassword.Text); } public string GetComputerName() { string szRet = ""; ManagementClass objMC; ManagementObjectCollection objMOC; try { // caller doesn't have to catch objMC = new ManagementClass("Win32_ComputerSystem"); objMOC = objMC.GetInstances(); } catch (Exception e) { textBoxOutput.AppendText(e.Message); return szRet; } foreach (ManagementObject objMO in objMOC) { if (null != objMO) { szRet = objMO["Name"].ToString(); break; } } return szRet; } public string GetDomainName() { string szRet = ""; ManagementClass objMC; ManagementObjectCollection objMOC; try { // caller does not have to catch objMC = new ManagementClass("Win32_ComputerSystem"); objMOC = objMC.GetInstances(); } catch (Exception e) { textBoxOutput.AppendText(e.Message); return szRet; } foreach (ManagementObject objMO in objMOC) { if (null != objMO) { if ((bool)objMO["partofdomain"]) { szRet = objMO["domain"].ToString(); textBoxOutput.AppendText("Computeren er med i domænet: " + szRet + Environment.NewLine); } else { textBoxOutput.AppendText("Computeren er i en Workgroup, ikke domæne." + Environment.NewLine); } } } return szRet; } public void HandleJoinandRenameDomain(string szDomain, string szNewHostname, string szUsername, string szPassword) { string szCurrentHostname = GetComputerName(); string szCurrent = GetDomainName(); ManagementObject objMO = new ManagementObject("Win32_ComputerSystem.Name='" + szCurrentHostname + "'"); if (null != objMO) { ManagementBaseObject result; objMO.Scope.Options.EnablePrivileges = true; objMO.Scope.Options.Authentication = AuthenticationLevel.PacketPrivacy; objMO.Scope.Options.Impersonation = ImpersonationLevel.Impersonate; if ((szCurrentHostname.ToUpper() != szNewHostname.ToUpper()) && ("" != szNewHostname)) { try { textBoxOutput.AppendText("Join domæne: Sætter computernavn til " + szNewHostname.ToUpper() + Environment.NewLine); ManagementBaseObject query2; query2 = objMO.GetMethodParameters("Rename"); query2["Name"] = szNewHostname; query2["Password"] = null; query2["UserName"] = null; result = objMO.InvokeMethod("Rename", query2, null); if (0 != (uint)result["ReturnValue"]) { textBoxOutput.AppendText("Kunne ikke ændre computernavnet, fejlkode: " + result["ReturnValue"].ToString() + Environment.NewLine); } textBoxOutput.AppendText("Success!" + Environment.NewLine); } catch (InvalidOperationException e) { textBoxOutput.AppendText("Join domæne fejlede: " + e.Message + Environment.NewLine); return; } catch (ManagementException e) { textBoxOutput.AppendText("Join domæne fejlede, kunne ikke ændre computernavnet: " + e.Message + Environment.NewLine); return; } } Thread.Sleep(45000); if ("" != szCurrent) { if (szCurrent.ToUpper() == szDomain.ToUpper()) { textBoxOutput.AppendText("Denne computer er allerede på domænet: " + szCurrentHostname + szCurrent + Environment.NewLine); return; } else { textBoxOutput.AppendText("Denne computer er allerede på et andet domain: " + szCurrent + Environment.NewLine); return; } } ManagementBaseObject query; try { query = objMO.GetMethodParameters("JoinDomainOrWorkgroup"); } catch (ManagementException) { textBoxOutput.AppendText("Join domæne fejlede, kunne ikke finde den lokale computer (???)." + Environment.NewLine); return; } query["Name"] = szDomain; query["Password"] = szPassword; query["UserName"] = szUsername; query["FJoinOptions"] = 3; // + 256 (tried with and with 256 textBoxOutput.AppendText("Prøver WMI metoden JoinDomainOrWorkgroup." + Environment.NewLine + "Domæne: " + query["Name"].ToString() + Environment.NewLine + "Username: " + query["UserName"].ToString() + Environment.NewLine + "Join options: " + query["FJoinOptions"].ToString() + Environment.NewLine); try { result = objMO.InvokeMethod("JoinDomainOrWorkgroup", query, null); } catch (ManagementException e) { textBoxOutput.AppendText("Join domæne fejlede, kode: " + (uint)e.ErrorCode + " kunne ikke udføre forespørgslen: " + e.Message + Environment.NewLine); return; } if (0 != (uint)result["ReturnValue"]) { textBoxOutput.AppendText("Join domæne fejlede: " + (uint)result["ReturnValue"] + " kunne ikke udføre forespørgslen." + Environment.NewLine); return; } } else { textBoxOutput.AppendText("Join domæne fejlede: Kunne ikke åbne management objektet." + Environment.NewLine); return; } } } }