Benutzer mit den meisten Antworten
Infos zu den Users einer Maschine/Domäne auflisten

Frage
-
Guten Tag,
ich versuche mit dem folgenden Code die Informationen zu den Users einer Maschine/Domäne aufzulisten, wenn ich auf Button klicke, wird folgendes gezeigt: "Der Netzwerkpfad wurde nicht gefunden."
Was habe ich bitte falsch gemacht?
namespace ActiveDirectory { class Users : CollectionBase { public User this[int index] { set { base.InnerList[index] = value; } get { return (User)base.InnerList[index]; } } internal void Add(User user) { base.InnerList.Add(user); } public static Users EnumUsers(string domainName, string machineName, string bindUser, string bindPassword) { Users users = new Users(); if (domainName == null && machineName == null) machineName = Environment.MachineName; string adsiPath = "WinNT://"; if (domainName != null && machineName != null) adsiPath += domainName + "/" + machineName + ",computer"; else if (machineName != null) adsiPath += machineName + ",computer"; else if (domainName != null) adsiPath += domainName + ",domain"; DirectoryEntry computerEntry = new DirectoryEntry(adsiPath, bindUser, bindPassword); try { foreach (DirectoryEntry de in computerEntry.Children) { if (de.SchemaClassName.ToLower() == "user") { User user = new User(); user.Name = de.Name; try { user.FullName = (string)de.Properties["FullName"].Value; } catch { } try { user.Beschreibung = (string)de.Properties["Description"].Value;} catch { } try { user.HomeDirectory = (string)de.Properties["HomeDirectory"].Value; } catch { } try { user.MaxStorage = (int)de.Properties["MaxStorage"].Value; } catch { } try { user.LastLogin = (DateTime)de.Properties["LastLogin"].Value; } catch { } users.Add(user); } } } finally { computerEntry.Dispose(); } return users; } } }
string domainName = null; string machineName = null; string bindUser = null; string bindPassword = null; string NL = Environment.NewLine; private void button1_Click(object sender, EventArgs e) { try { Users users = Users.EnumUsers(domainName, machineName, bindUser, bindPassword); for (int i = 0; i < users.Count; i++) { textBox1.Text = "Name: {0}, users[i].Name" + NL + "Vorname: {0}, users[i].FullName" + NL + "Beschreibung: {0}, users[i].Description" + NL + "Letzter Login: {0}, users[i].LastLogin" + NL + "Home-Verzeichnis: {0}, users[i].HomeDirectory" + NL + "Maximaler Speicherplatz: {0}, users[i].MaxStorage"; } } catch (Exception ex) { textBox1.Text = ex.Message; } }
Antworten
-
Hi,
das ist ja auch nicht schlimm.
Ich formuliere es dann mal anders.
Anstelle von null bei allen Werten übergib mal:
string domainName = "NameEurerDomäne"; string machineName = "."; string bindUser = "BenutzernameFürADZugriff"; string bindPassword = "PasswortDesBenutzersFürADZugriff";
Also natürlich nicht genau diese Werte, sondern die, die für euer AD passen.
Dann setzt Du mal einen Breakpoint auf die erste Codezeile in der EnumUsers Methode und gehst dann mit F10 schrittweise durch den Code.
Beachte bitte auch, dass ein catch Zweig, in dem rein gar nichts steht, in der Regel nicht sinnvoll ist. Ich würde hier eher ein Protokoll füllen (es reicht ja eine List<String>, in die Du dann ex.ToString() reinschreibst) und mir das dann mal anschauen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 18. Februar 2019 07:47
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 27. Februar 2019 12:37
Alle Antworten
-
Hi,
Du fragst, was Du falsch gemacht hast: Du hast keine Breakpoints gesetzt, nicht debuggt, nicht geschaut, welche Codezeile genau den Fehler auslöst und uns alles mit null übergeben. Wie soll das funktionieren?
Für den lokalen PC nimmt man in der Regel ., für eine Domäne eben was anderes. User und PW sollte man wohl auch setzen, ansonsten kann man die Anwendung auch mit einem berechtigten AD Acccount starten (also einem, der die Informationen lesen darf)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
Hi,
Du fragst, was Du falsch gemacht hast: Du hast keine Breakpoints gesetzt, nicht debuggt, nicht geschaut, welche Codezeile genau den Fehler auslöst und uns alles mit null übergeben. Wie soll das funktionieren?
Für den lokalen PC nimmt man in der Regel ., für eine Domäne eben was anderes. User und PW sollte man wohl auch setzen, ansonsten kann man die Anwendung auch mit einem berechtigten AD Acccount starten (also einem, der die Informationen lesen darf)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport
Ich bin leider neue was Programmieren angeht -
Hi,
das ist ja auch nicht schlimm.
Ich formuliere es dann mal anders.
Anstelle von null bei allen Werten übergib mal:
string domainName = "NameEurerDomäne"; string machineName = "."; string bindUser = "BenutzernameFürADZugriff"; string bindPassword = "PasswortDesBenutzersFürADZugriff";
Also natürlich nicht genau diese Werte, sondern die, die für euer AD passen.
Dann setzt Du mal einen Breakpoint auf die erste Codezeile in der EnumUsers Methode und gehst dann mit F10 schrittweise durch den Code.
Beachte bitte auch, dass ein catch Zweig, in dem rein gar nichts steht, in der Regel nicht sinnvoll ist. Ich würde hier eher ein Protokoll füllen (es reicht ja eine List<String>, in die Du dann ex.ToString() reinschreibst) und mir das dann mal anschauen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 18. Februar 2019 07:47
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 27. Februar 2019 12:37
-
Hi,
das ist ja auch nicht schlimm.
Ich formuliere es dann mal anders.
Anstelle von null bei allen Werten übergib mal:
string domainName = "NameEurerDomäne"; string machineName = "."; string bindUser = "BenutzernameFürADZugriff"; string bindPassword = "PasswortDesBenutzersFürADZugriff";
Also natürlich nicht genau diese Werte, sondern die, die für euer AD passen.
Dann setzt Du mal einen Breakpoint auf die erste Codezeile in der EnumUsers Methode und gehst dann mit F10 schrittweise durch den Code.
Beachte bitte auch, dass ein catch Zweig, in dem rein gar nichts steht, in der Regel nicht sinnvoll ist. Ich würde hier eher ein Protokoll füllen (es reicht ja eine List<String>, in die Du dann ex.ToString() reinschreibst) und mir das dann mal anschauen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, RemotesupportIch hätte mal bitte noch eine Frage.
Für den BenutzernameFürADZugriff muss ich den AD Administrator UserName und sein PasswortFürADZugriff verwenden oder? Mein Rechner ist in der Domäne und der System-Integration-Dozent meint jeder Domain Benutzer kann das Ohne die Daten von AD Admin angewiesen zu sein, ist das so möglich?
- Bearbeitet von 1 auf 300 beschleunigen Dienstag, 12. Februar 2019 08:44
-
Hi,
bestimmte Infos kann jeder aktive Benutzer im AD lesen (muss er ja auch), andere Infos wiederum nicht.
Da ich kein AD Spezi bin, kann ich dir nicht sagen, was wann von wem wie gelesen werden kann und wann, was, wie eben nicht.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Bearbeitet Stefan FalzModerator Dienstag, 12. Februar 2019 08:59
-
Hi,
bestimmte Infos kann jeder aktive Benutzer im AD lesen (muss er ja auch), andere Infos wiederum nicht.
Da ich kein AD Spezi bin, kann ich dir nicht sagen, was wann von wem wie gelesen werden kann und wann, was, wie eben nicht.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport
Ok, vielen Deine Bemühungen
Nette grüße
Sofi