none
Programm zum eintragen/hinzufügen von zwei Registry Werten hängt sich auf "nicht DCs" (Domain-Controller) auf RRS feed

  • Frage

  • 
    using Microsoft.Win32;
    using System;
    using System.Collections.Generic;
    using System.DirectoryServices.ActiveDirectory;
    using System.Linq;
    using System.Management;
    using System.Text;

    namespace NLA
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                // The name of the key must include a valid root.
                const string userRoot = "HKEY_LOCAL_MACHINE";
                const string subkey = "\\SYSTEM\\CurrentControlSet\\Services\\NlaSvc\\";
                const string keyName = userRoot + subkey;
                const string valueName = "DependOnService";

                string[] RegData = (string[])Registry.GetValue(keyName, valueName, new string[] { "" });

                List<string> values = new List<string>();
                values.AddRange(RegData);
                values.Add("DNS");
                values.Add("NTDS");

                values = values.Distinct().ToList<string>();

                    if (IsThisMachineIsADomainController())
                    {
                        Console.WriteLine("Ich bin ein DC !");
                        Registry.SetValue(keyName, valueName, values.ToArray());
                        Console.WriteLine("Werte wurden hinzugefügt!");
                        Console.ReadKey();
                    }
                    else
                    {                   
                        Console.WriteLine("...");
                        Console.ReadKey();
                    }           
            }
            // Bei dieser Funktion hängt sich das Programm bei nicht DCs (Domain Controller) auf
            public static bool IsThisMachineIsADomainController()
            {
                    Domain domain = Domain.GetCurrentDomain();

                    string thisMachine = String.Format("{0}.{1}", Environment.MachineName, domain.ToString());
                    thisMachine = thisMachine.ToLower();

                    //Aufzählung der Domain Controller

                    List<string> allDcs = new List<string>();

                    string name = "";
                    foreach (DomainController dc in domain.DomainControllers)
                    {
                        name = dc.Name;
                        allDcs.Add(name);                    
                    }
                    return allDcs.Contains(thisMachine);
            }
        }
    }
    Montag, 22. Juli 2019 06:43

Alle Antworten

  • Hallo Jiyan.Fontaine,

    Welche ist Deine Version von Windows Server? Du kannst 2 Optionen ausprobieren, um zu überprüfen, ob der aktuelle Computer ein Domänencontroller ist oder nicht. Die erste Möglichkeit besteht darin, die Domänenrolleninformationen des aktuellen Computers mithilfe der Win32_ComputerSystem-WMI-Klasse abzurufen. Ein anderer Weg ist zu prüfen, ob der Active Directory-Domänendienst installiert ist oder nicht, die durch die Verwendung der Win32_ServerFeature-WMI-Klasse erreicht wird. Diese Informationen werden im folgenden Thread bereitgestellt:
    C# - Check current machine is Domain Controller or not

    Gruß,

    Ivan Dragov


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 23. Juli 2019 06:26
    Administrator
  • Hallo Ivan Dragov,

    im besten Fall, soll dies "ab" Windows Server 2012 "R2" laufen.

    Gruß

    Mittwoch, 24. Juli 2019 07:05