Wenn Ihre Frage, ob ein Server zu sehen, installiert ist, ist ein Domänencontroller ist, können Sie Zählen Sie die Domänencontroller in der Domäne auf, und überprüfen Sie den Hostnamen des Servers, auf dem Sie sitzen, um festzustellen, ob er mit einem dieser Server übereinstimmt. Um die Liste der Domänencontroller zu erhalten:
var domainControllers = new List<string>();
var domain = Domain.GetCurrentDomain();
foreach (var dc in domain.DomainControllers)
{
domainControllers.Add(dc.Name);
}
string whoami = Dns.GetHostname();
Stellen Sie sicher, erforderliche Fehler hinzufügen Handhabung (wie wenn Sie diese auf einem Arbeitsgruppe-Computer ausführen, wird es sterben).
EDIT: Alternative Wege der DCPROMO Erfassen (weil es möglich ist, Domänendienste ohne DCPROMO zu installieren, und das ist eine schlechte Sache):
1) Parse (und prüfen für die Existenz) der Debug-Log das wird erstellt, wenn DCPROMO seine Sache macht. Sollte bei C werden: \ windows \ debug \ dcpromo.log
2) Dieser DSQUERY Befehl ist schnell und geben Ihnen alle Server, auf denen DCPROMO ran war:
dsquery * "cn=Sites,cn=Configuration,dc=MyDomain,dc=com" -Filter "(cn=NTDS Settings)" -attr distinguishedName whenCreated
Problem ist immer, dass von Befehl Zeilenausgabe, wenn Sie es mit Process gestartet haben. Ich arbeite an einer Möglichkeit, dies zu tun und werde es aktualisieren, sobald ich es getestet habe, da ich die AD-Filterung für eine Weile nicht in einer Abfrage durchgeführt habe.
Nach welchen Rollen fragen Sie? Alle oder nur DC? –
Die Active Directory-Domänendienste-Rolle – user3174075
Danke. Ich habe Ihren Titel geändert, um klarzustellen, dass Sie keinen allgemeinen Mechanismus zum Auffinden von _all_ Rollen auf dem Server benötigen. –