2012-08-28 6 views
5

Ciao mi sono bloccato cercando di aggiungere una funzione al mio programma di moduli di Windows che consente a un utente di digitare in una casella di testo che computer o computer vorrebbero cercare in Active Directory. L'utente immette la stringa di ricerca in una casella di testo, quindi fa clic su un pulsante e i computer che corrispondono a tale risultato di ricerca vengono visualizzati in una casella di ricerca separata. Ecco il mio codice finora.Cerca Active Directory per i nomi di computer che utilizzano l'input utente

Vorrei anche ogni nome di computer per essere su una riga separata come ad esempio:

computername1    
computername2   
computername3 

Grazie!

Questo è ciò che all'interno del tasto si presenta come:

List<string> hosts = new List<string>(); 
DirectoryEntry de = new DirectoryEntry(); 
de.Path = "LDAP://servername"; 

try 
{ 
    string adser = txtAd.Text; //textbox user inputs computer to search for 

    DirectorySearcher ser = new DirectorySearcher(de); 
    ser.Filter = "(&(ObjectCategory=computer)(cn=" + adser + "))"; 
    ser.PropertiesToLoad.Add("name"); 

    SearchResultCollection results = ser.FindAll(); 

    foreach (SearchResult res in results) 
    //"CN=SGSVG007DC" 
    { 
     string computername = res.GetDirectoryEntry().Properties["Name"].Value.ToString(); 
     hosts.Add(computername); 
     //string[] temp = res.Path.Split(','); //temp[0] would contain the computer name ex: cn=computerName,.. 
     //string adcomp = (temp[0].Substring(10)); 
     //txtcomputers.Text = adcomp.ToString(); 
    } 

    txtcomputers.Text = hosts.ToString(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.ToString()); 
} 
finally 
{ 
    de.Dispose();//Clean up resources 
} 
+0

Si dovrebbe [accettare le risposte ad alcune delle vostre domande precedenti] (http://meta.stackexchange.com/q/5234/153998). Questo dimostra il tuo apprezzamento per le persone che * hanno dedicato il loro tempo ad aiutarti *, e miglioreranno le possibilità che risponderanno a qualsiasi domanda futura tu possa avere. –

risposta

7

Se siete su .NET 3.5 e fino, si dovrebbe verificare la (S.DS.AM) namespace System.DirectoryServices.AccountManagement. Leggi tutto su di esso qui:

In sostanza, è possibile definire un contesto di dominio e trovare facilmente gli utenti e/o gruppi in AD:

// set up domain context 
using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain)) 
{ 
    // find a computer 
    ComputerPrincipal computer = ComputerPrincipal.FindByIdentity(ctx, "SomeComputerName"); 

    if(computer != null) 
    { 
     // do something here....  
    } 
}  

Se non è necessario trovare un singolo computer, ma cercare un intero elenco di computer, è possibile utilizzare la nuova interfaccia PrincipalSearcher, che sostanzialmente consente di impostare un oggetto "QBE" (query per esempio) che si sta cercando, definendo i criteri di ricerca e quindi cercare le corrispondenze per tali criteri.

Il nuovo S.DS.AM rende davvero facile giocare con utenti e gruppi in AD!

+0

Grazie, guarda male. – Boundinashes6

Problemi correlati