Hallo und herzlich Willkommen,
von Zeit zu Zeit werde ich mal einige Snippets mit Code hier veröffentlichen und zur Diskussion freigeben. Es sei gesagt, dass ich weder professioneller Programmierer bin, noch etwas in die Richtung wirklich gelernt habe – alles Learning by doing, daher bin ich auch für sämtliche Denkanstöße, Kritik und Verbesserungsvorschläge sehr dankbar.
Den Anfang macht eine kleine Methode, die per WMI die Benutzer einer bestimmten Gruppe herausfindet, und diese dann als Liste zurückgibt. Durch die Parameter, die der Methode übergeben werden, lassen sich die Gruppe und die Domäne der User beeinflussen.
public List<string> getusers(string hostname, string group) { StringBuilder sBuilder = new StringBuilder("GroupComponent="); sBuilder.Append('"'); sBuilder.Append("Win32_Group.Domain="); sBuilder.Append("'"); sBuilder.Append(hostname); sBuilder.Append("'"); sBuilder.Append(",Name="); sBuilder.Append("'"); sBuilder.Append(group); sBuilder.Append("'"); sBuilder.Append('"'); SelectQuery sQuery = new SelectQuery("Win32_GroupUser", sBuilder.ToString()); ManagementObjectSearcher searcher = new ManagementObjectSearcher(sQuery); List<string> Usernames = new List<string>(); foreach (ManagementObject user in searcher.Get()) { string name; string[] teile = user["PartComponent"].ToString().Split(','); name = teile.Last().Remove(0, 6); name = name.Remove(name.Length - 1, 1); Usernames.Add(name); } return Usernames; }
Der ursprüngliche Rückgabewert von user[„PartComponent“].ToString() wäre die komplette WMI-Auflösung des Namens – der sich sehr unschön ließt – daher wird mit der Methode Split alles bis zum ersten Komma in einen Teilstring geschrieben, der Rest (also unser Username) in einen zweiten.
Nach dem Komma haben wir noch den Eintrag Name=“ vor dem eigentlichen Username stehen, und ein Anführungszeichen hinter dem Username. Das wird mit den beiden Remove-Methoden gegen Ende bereinigt, bevor der sauber dargestellte Benutzername der Liste hinzugefügt wird.
Wie bereits erwähnt, erhebe ich hiermit keinen Anspruch auf Professionalität oder die „Best Practice“, und vielleicht fällt ja dem ein oder anderen noch auf was man verbessern könnte…
Bis dahin!
Hannes