2016-05-05 6 views
0

Ich habe eine Aufgabe, bestimmte Computergruppe auszuwählen. Ihre eindeutige Eigenschaft ist, dass ihre Sicherheitsliste Berechtigungen für bestimmte Benutzer enthält. In AD-Tool - Rechtsklick auf Computer, Registerkarte Sicherheit, Gruppen- oder Benutzername wie auf der Screenshot zu sehen: AD screenshotActive Directory-Sicherheit - ist der Benutzer auf dem Computer?

kann ich das ComputerPrincipal Objekt der entsprechenden Host, Userprincipal des Benutzers bekommen, und die beiden zugrunde liegenden Directory Objekte, aber ich kämpfe um einen "Join" zu machen und herauszufinden, ob der Benutzer auf der Liste ist.

Ich benutze C#, .NET3.5.

Antwort

0

Sie werden durch jede Gruppe in einer Schleife haben, und für jede Gruppe, die Sie so etwas tun könnte (vorausgesetzt, Sie eine groupDe haben, die eine Directory für die Gruppe ist):

foreach (var identityReference in groupDe.ObjectSecurity.GetAccessRules(true, false, typeof(System.Security.Principal.SecurityIdentifier)) { 
    var nt_name = identityReference.Translate(typeof(NTAccount)).Value; 
    //nt_name.Value is now domain\username of the user this permission is for 
    //so you can match this against your list of users 
} 

Die false in der Anruf an GetAccessRules macht es nicht auf geerbte Berechtigungen aussehen (ich nahm an, das ist, was Sie wollen).

Ich habe das nicht getestet, also könnte es einige Feinabstimmungen erfordern.

Dies wird wahrscheinlich ein sehr langsamer Prozess sein, abhängig davon, wie viele Gruppen Sie durchsehen. Sie können das Problem möglicherweise schneller beheben, indem Sie den Anruf an Translate ablehnen. identityReference.Value hätte (glaube ich) eine SID, also könnten Sie versuchen, nach SID zu suchen, anstatt etwas anderes zu übersetzen, bevor Sie übereinstimmen.

Verwandte Themen