Ich fragte mich, ob jemand weiß, wie man die Mitgliedschaft von lokalen Gruppen auf einem Remote-Server programmgesteuert über C# erhalten. Benötigt dies Administratorrechte? Und wenn ja, gibt es eine Möglichkeit, die Mitgliedschaft des angemeldeten Benutzers (oder nicht) dieser Gruppen zu bestätigen?Ermitteln von Mitgliedern der lokalen Gruppen über C#
Antwort
Vielleicht kann dies über WMI geschehen?
Howto: (Almost) Everything In Active Directory via C# ist sehr hilfreich und enthält auch Anweisungen zur Iteration von AD-Mitgliedern in einer Gruppe.
public ArrayList Groups(string userDn, bool recursive)
{
ArrayList groupMemberships = new ArrayList();
return AttributeValuesMultiString("memberOf", userDn,
groupMemberships, recursive);
}
Sie auch diese Funktion benötigen:
public ArrayList AttributeValuesMultiString(string attributeName,
string objectDn, ArrayList valuesCollection, bool recursive)
{
DirectoryEntry ent = new DirectoryEntry(objectDn);
PropertyValueCollection ValueCollection = ent.Properties[attributeName];
IEnumerator en = ValueCollection.GetEnumerator();
while (en.MoveNext())
{
if (en.Current != null)
{
if (!valuesCollection.Contains(en.Current.ToString()))
{
valuesCollection.Add(en.Current.ToString());
if (recursive)
{
AttributeValuesMultiString(attributeName, "LDAP://" +
en.Current.ToString(), valuesCollection, true);
}
}
}
}
ent.Close();
ent.Dispose();
return valuesCollection;
}
Wenn Sie nun wollen diese AD-Methode verwenden, können Sie die Informationen in diesem Artikel verwenden könnte, aber es nutzt nicht verwalteten Code:
http://www.codeproject.com/KB/cs/groupandmembers.aspx
Die Beispielanwendung, die sie gemacht:
Es scheint, dass es eine neue Assembly in .net 3.5 namens System.DirectoryServices.AccountManagement gibt, die eine sauberere Implementierung als System.DirectoryServices bietet. Dominick Baier blogs about ein paar einfacher Operationen sowie die Zugehörigkeit zu einer Gruppe Überprüfung: -
public static bool IsUserInGroup(string username, string groupname, ContextType type)
{
PrincipalContext context = new PrincipalContext(type);
UserPrincipal user = UserPrincipal.FindByIdentity(
context,
IdentityType.SamAccountName,
username);
GroupPrincipal group = GroupPrincipal.FindByIdentity(
context, groupname);
return user.IsMemberOf(group);
}
Ich denke, dass ich diesen Ansatz verwenden, danke für die Anregungen, obwohl aber! :-)
was ist der Kontexttyp hier ??? @ ljs – TechBrkTru
Ich stellte eine ähnliche Frage und endete damit, eine answer zu schreiben, die WMI verwendete, um die Gruppenmitglieder zu benennen. Ich hatte echte Probleme mit der Authentifizierung im System.directoryservices.accountmanagement stuff. YMMV, natürlich.
Ich wäre gespannt, ob das System.DirectoryServices.AccountManagement vollständig verwaltet wird. Ich habe System.DirectoryServices.ActiveDirectory verwendet, das ein Wrapper für COM Interop ist, der zu vielen Kopfschmerzen geführt hat ...
Dies kann möglicherweise helfen. Ich musste eine App entwickeln, wo wir gegen Active Directory authentifizieren möchten, und untersuchen Sie auch die Gruppen Zeichenfolgen, in denen der Benutzer ist.
Aus ein paar Gründen wollen wir nicht Windows-Authentifizierung verwenden, sondern haben unsere eigene formularbasierte Authentifizierung. Ich habe die folgende Routine entwickelt, um zum einen den Benutzer zu authentifizieren und zum anderen alle Gruppen zu untersuchen, denen der Benutzer angehört. Vielleicht kann es helfen. Die Routine verwendet LogonUser zur Authentifizierung und ruft dann die Liste der numerischen Guid-artigen Gruppen-IDs (SIDs) für diesen Benutzer ab und übersetzt diese in eine für den Menschen lesbare Form.
Hoffe das hilft, musste ich diesen Ansatz aus einer Vielzahl von verschiedenen Google-Suchen synthetisieren.
private int validateUserActiveDirectory()
{
IntPtr token = IntPtr.Zero;
int DBgroupLevel = 0;
// make sure you're yourself -- recommended at msdn http://support.microsoft.com/kb/248187
RevertToSelf();
if (LogonUser(txtUserName.Value, propDomain, txtUserPass.Text, LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, token) != 0) {
// ImpersonateLoggedOnUser not required for us -- we are not doing impersonated stuff, but leave it here for completeness.
//ImpersonateLoggedOnUser(token);
// do impersonated stuff
// end impersonated stuff
// ensure that we are the original user
CloseHandle(token);
RevertToSelf();
System.Security.Principal.IdentityReferenceCollection groups = Context.Request.LogonUserIdentity.Groups;
IdentityReference translatedGroup = default(IdentityReference);
foreach (IdentityReference g in groups) {
translatedGroup = g.Translate(typeof(NTAccount));
if (translatedGroup.Value.ToLower().Contains("desired group")) {
inDBGroup = true;
return 1;
}
}
}
else {
return 0;
}
}
- 1. Ermitteln der lokalen iPhone-Nummer über SDK
- 2. Gruppen mit mehr als x Mitgliedern auswählen
- 3. C++ Konstruktor mit shared_ptr Mitgliedern
- 4. Dauer der Audiodatei ermitteln C#
- 5. Ermitteln Sie die Rangfolge von Gruppen in einer selbstreferenzierenden Tabelle
- 6. Destruktor einer Klasse C mit Mitgliedern der Zeiger C
- 7. Ermitteln aller Gruppen für einen definierten Benutzer
- 8. Ermitteln Sie doppelte Gruppen im Stream
- 9. Ermitteln der lokalen IP-Adresse in der P2P-Anwendung
- 10. Ermitteln der Hive-Version über die Abfrage
- 11. Optimierung des Zugangs zu Mitgliedern in C++
- 12. Wählen Sie Gruppen-ID aus der Tabelle mit dem angegebenen Mitgliedern zählt
- 13. Ermitteln der Zeitzone des Clients mit C#
- 14. Ada-Äquivalent der lokalen statischen Variable von C/C++
- 15. Ermitteln der Entfernung von Themen über Push-Diffusion
- 16. MySQL: Suche Gruppe von konstituierenden Mitgliedern mit UND-Bedingung
- 17. Template-Klasse mit variabler Anzahl von Mitgliedern in C++
- 18. Ziel C: Ermitteln der Koordinaten eines "Klick"
- 19. Erfassen von Gruppen in Regex in C++
- 20. Ermitteln der übergeordneten Prozess-ID aus C#
- 21. Finden Sie verbundene Gruppen über Ebenen
- 22. Ermitteln der Länge von Nvarchar
- 23. Ermitteln von STRG + C in Node.js
- 24. über C struct Mitglieder
- 25. ermitteln Netzwerkadapter Typ über WMI
- 26. Ermitteln der referenzierten DLL-Version in C#
- 27. Wie reduziert das Hinzufügen von Mitgliedern die Rückwärtskompatibilität von Klassen?
- 28. Ermitteln der IPv4-Subnetzmaske in C#
- 29. Über TBB Thread lokalen Speicher
- 30. C/C++ Der Zweck der statischen const lokalen Variablen
möglich Duplikat [Auflisten von Windows-Benutzergruppenmitgliedern auf dem Remote-System unter Verwendung von C#] (http://stackoverflow.com/questions/21514/enumerate-windows-user-group-members-on-remote-system- using-c-sharp) –