C# Forest.Site eine spezielle Site

schumischumi

Lt. Commander
Registriert
Dez. 2011
Beiträge
1.121
Hi

ich will mir Site-Informationen aus dem AD holfen und verwende dafür folgenden code:

Code:
try
		      {
		        string targetForestName = "test.domain.local";
		
		        DirectoryContext context = new DirectoryContext(
		                                                    DirectoryContextType.Forest,  
		                                                    targetForestName,"administrator", "adminpasswort");
		        
		        Forest forest = Forest.GetForest(context);
		
		        foreach (ActiveDirectorySite site in forest.Sites)
		        {
		        	if(site.Name == "Sitename"){
			           add2List(2,"Site", site.Name);
		
			          Console.WriteLine("It contains domain:");
			          foreach (Domain d in site.Domains)
			          {
			             add2List(2,"Domain", d.Name);
			          }
			          foreach (DirectoryServer d in site.Servers)
			          {	
			             add2List(2,"server", d.Name);
			            add2List(2,"server-ip", d.IPAddress);
			          
			            System.Collections.IEnumerator myEnumerator1 = d.Partitions.GetEnumerator();
				          while ( myEnumerator1.MoveNext() ){
			        			  add2List( 2,"partitions", ""+myEnumerator1.Current );
				        }
			            System.Collections.IEnumerator myEnumerator = d.InboundConnections.GetEnumerator();
				          while ( myEnumerator.MoveNext() ){
			        			  add2List( 2,"inbound", ""+myEnumerator.Current );
				        }
			          }
		
			          
			         
			          foreach (ActiveDirectorySiteLink sl in site.SiteLinks)
			          {
			             add2List(2,"Sitelink", sl.Name);
			            System.Collections.IEnumerator myEnumerator3 = sl.Sites.GetEnumerator();
			            while ( myEnumerator3.MoveNext() ){
			        			  add2List(2, "site-sites", ""+myEnumerator3.Current );
				        }
			          }
			        
			          foreach (ActiveDirectorySubnet subnet in site.Subnets)
			          {
			             add2List(2,"Subnet, location, site", 
			                                subnet.Name + "; " +
			                                subnet.Location + "; " +
			                               subnet.Site);
			          }
			           add2List(2,"InterSiteTopologyGenerator is", 
			                                              ""+site.InterSiteTopologyGenerator);

		        	}
		        }
		      }
		      catch (Exception e)
		      {
		        MessageBox.Show("\rUnexpected exception occured:\r" +
		                          e.GetType().Name + ":" + e.Message);
		      }

funktioniert soweit wunderbar, aber ich muss halt erst die komplette Site-Liste im Forest durchgehen bis site.Name == "Sitename" ist. dauert halt recht lange wenn man sehr sehr viele Sites hat.
würde mir eben gerne eine spezielle Site rausziehen ohne das ganze durchzulaufen. Wahrscheinlich was ganz simples aber steh gerade auf dem schlauch.

danke schomal
 
Hey,

versuch das mal.

Gruß

Code:
string dnsName = "test.domain.local";
string siteName = "testsite";

DirectoryContext context = new DirectoryContext( DirectoryContextType.Forest, dnsName ,"administrator", "adminpasswort" );
var site = ActiveDirectorySite.FindByName( context, siteName );
 
@holy: vielen Dank. Könnt so einfach sein wenn man bissl Hirn hätte...^^

@PapstRatze: Ja auch, aber dann bekomm ich für myEnumerator.Current.ToString das zurück: Konvertierung von "Methodengruppe" in "string" nicht möglich.
 
schumischumi schrieb:
@PapstRatze: Ja auch, aber dann bekomm ich für myEnumerator.Current.ToString das zurück: Konvertierung von "Methodengruppe" in "string" nicht möglich.
ToString ist eine Methode also brauchst du auch die Klammern also:
Code:
myEnumerator.Current.ToString()

Wieso benutzt du überhaupt den Enumerator direkt? So wäre es doch viel bequemer und besser lesbar:
Code:
// Partitions ist sowieso eine String-Collection.
foreach (string partitionName in d.Partitions)
{
    add2List( 2,"partitions", partitionName);
}
 
@TheCadillacMan: Wahnsinn ohne ().... Heute kein guter Tag oder zu wenig Kaffee.

Das Thema wäre für mich abgeschlossen vielen Dank an alle.

Hätte aber noch eine Frage: Kann ich, und falls ja wie, die WINS-Replicationspartner (nicht den WINS-Eintrag in den Netzwerkeinstellungen) per WMI oder direkt C# abfragen? kann dafür aber auch gerne ein extra Thema aufmachen, falls gewünscht.
 
schumischumi schrieb:
Hätte aber noch eine Frage: Kann ich, und falls ja wie, die WINS-Replicationspartner (nicht den WINS-Eintrag in den Netzwerkeinstellungen) per WMI oder direkt C# abfragen? kann dafür aber auch gerne ein extra Thema aufmachen, falls gewünscht.

Nicht direkt. Hier bietet sich aber PowerShell an.
Du könntest eine Remote-Shell öffnen (auch aus C# heraus möglich) und dann einfach

netsh wins show partner 0

ausführen.

Für eine Liste der Befehle siehe hier.
 
danke nochmal an alle.

@holy: gute idee probleme gehnen hier weiter...
 
Zurück
Oben