C# Möchte Computername automatisch ändern

Sylar

Commander
Registriert
März 2011
Beiträge
3.067
Hostname "ersetzen"

Hallo!

Ich suche in C# eine Möglichkeit, wie ich den Computername ändere. Die Systeme heißen alle zB X0001W, X0002X....
Jetzt möchte ich mit einem Button, dann den Namen auf 0001w ändern.

Folgendes hab ich mal programmiert:
Computername auslesen
Prüft ob der Hostname ein X hat oder nicht --> Button aktiv/inaktiv

Was fehlt mir:
neuen Computername in das System (Registry) zu schreiben
Textfeld für einen alternativen Hostename einzutragen
Abfrage für einen Neustart nachdem der neue Computername gesetzt wurde

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Management;

namespace Hostname
{
    public partial class Form1 : Form
    {
        string hostname;
       
        public Form1()
        {
            InitializeComponent();

            Hostname();
            if (CheckHostname(hostname))
            {
                button1.Enabled = false;
            }
        }

        public void Hostname()
        {
            hostname = System.Net.Dns.GetHostName();
            System.Net.IPHostEntry hostInfo = System.Net.Dns.GetHostEntry(hostname);
            string IpAdresse = hostInfo.AddressList[0].ToString();
            label1.Text = hostname;
        }

        private void HostnameTxtbox_TextChanged(object sender, EventArgs e)
        {
            HostnameTxtbox.Text = hostname;
        }

        private string Xremove(string hostname)
        {
            char[] MyChar = { 'X', 'x' };
            string TrimString = hostname.TrimStart(MyChar);
            hostname = TrimString;
            return hostname;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string hostname = System.Net.Dns.GetHostName();
            System.Net.IPHostEntry hostInfo = System.Net.Dns.GetHostEntry(hostname);
            string IpAdresse = hostInfo.AddressList[0].ToString();

            if (hostname.StartsWith("X") || hostname.StartsWith("x"))
            {
                hostname = Xremove(hostname);
            }
            MessageBox.Show(hostname);
        }
    }
}

Ich weiß, es ist nicht die beste Art, aber es funktioniert zumindest. Nur wie schreibe ich jetzt den neuen Namen in die Registry, damit auch das System es geändert wird.
 
Zuletzt bearbeitet:
Registry-Werte ändern ist eigentlich auch kein großes Hexenwerk in .NET...
 
Wenn man es kann ist eh kein Problem, nur bin ich nicht sehr fit in C#...

Was ich so rauslese, ist das mit den Registry unsauber und man sollte Netbios verwenden... oder ist netbios der falsche?

Naja im Prinzip brauch ich nur mehr die FUnktion, wie ich den neuen Namen in das System reinschreiben. Eventuell mit "SetComputerNameEx"
 
Zuletzt bearbeitet:
Bloß nicht auf meinen Link klicken!!!

(Das war ursprünglich zurecht groß geschrieben, danke Forum...)
 
Über die Registry läuft es in einer Domäne leider nicht sauber. Sobald ich den alten PC löschen lasse und das Programm ausführe und über die Registry den neuen Namen eintrage, dann fliegt der PC ebenfalls raus aus der Domäne.

Gibt es eine Funktion, dass das Umbennen, erst nach einem neustart erfolgt, wie bei der eigenen Windowsfunktion.
 
Folgendes Problem bleibt bestehen.

Ich nutze derzeit die Funktion SetComputernameex. Diese Funktioniert einwandfrei. Nur hab ich das Problem, dass der Computer in einer Domäne hängt und nach dem Neustart aus der Domäne rausfliegt!

Hab dann ein JoinDomain Methode eingabaut, aber wenn ich den Join durchführe, sagt er mir, dass der PC bereits in der Domäne ist. Nach dem Neustart fliegt der halt jedes mal raus und ich kann ihn händisch und mühselig wieder in die Domäne eintragen.

Was gibts den bei der Funktion genau zu beachten
 
Mir ist folgendes erst vor kurzem bewusst geworden.

Ich hab einen PC mit dem Name "TestPC1". Der ist in einer Domäne. Jetzt hab ich einen 2. PC der den "TestPC1" ersetzen soll. Natürlich soll er den gleichen Namen haben. Der 2. PC hat den Namen "XTestPC1". Wenn ich jetzt den "TestPC1"von der Domäne löschen lassen und den "XTestPC1" in "TestPC1" umbennenen möchte, hab ich halt das Problem, wie oben schon beschrieben, dass er aus der OU rausfliegt. Wie kann ich es verhindern
 
Garnicht du musst ihn manuell wieder in die OU stecken (oder mit deinem Tool) wenn du ihn aus der AD gelöscht hast.
Generell ist das was du da machst der Domäne nicht wirklich zuträglich. Du kannst nur hoffen das du damit nicht Spätfolgen in der AD und im DNS auslöst... mir wäre das zu riskant da mit einem selbstgebastelten Tool das irgendwie zu funktionieren scheint in der AD rumzudoktern...
 
Wenn ich ihn per Computer-Eigenschaften umbennene, dann bleibt er aber in der richtigen OU! Da ich mir aber diesen Schritt ersparen möchte, will ich halt es programmieren.

Derzeit verwende ich diese Funktion.
http://www.pinvoke.net/default.aspx/kernel32.setcomputernameex

nur muss ich noch herumtesten, welche Funktion fürs AD richtig ist. Ich tippe mal auf: ComputerNamePhysicalDnsFullyQualified
 
Zurück
Oben