Frage

Ich bin Schleife durch ein Netzwerkverzeichnis und versuchen, die Benutzer- / Gruppennamen (Berechtigungen), um mit jeder Datei / Ordner zugeordnet. Ich erhalte den Rücken des SID, aber ich will die Namen wie „group_test“ und nicht „S-1-5-32-544“. Hier ist mein Code -

var files = Directory.GetFiles(path, "*.*", SearchOption.TopDirectoryOnly);

                foreach (var f in files2)
                {
                    var fileInfo = new FileInfo(f);
                    var fs = fileInfo.GetAccessControl(AccessControlSections.Access);

                    foreach (FileSystemAccessRule rule in fs.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
                    {
                        var value = rule.IdentityReference.Value;
                        Response.Write(string.Format("File: {0} \t Usergroup: {1} <br/>", fileInfo.Name, value));
                    }  }

ich SID aus dem obigen Code, sondern in der foreach-Schleife, wenn ich diese stattdessen verwenden -

(NTAccount)((SecurityIdentifier)rule.IdentityReference).Translate(typeof(NTAccount)).Value

Ich erhalte diese Ausnahme - Some or all identity references could not be translated.

Es scheint, dass die Methode Übersetzen nicht auf Remote-Freigaben arbeiten. Wie rufe ich die wirklichen Namen der SID? Der Remote-Server nicht LDAP hat.

Danke.

War es hilfreich?

Lösung

Das Problem ist, dass Sie versuchen, einen SID aufzulösen, ist local , um eine Remote-Maschine. Als Antwort auf diese Frage heißt es:

Das SecurityReference Objekt ist Übersetzen Methode funktioniert auf nicht-lokale SIDs aber nur für Domain-Konten ...

Das Link stellt ein Beispiel für die ferne SID Lösung WMI verwendet, die für die Erfüllung Ihrer Aufgabe wahrscheinlich die beste Methode ist.

Andere Tipps

Wenn Sie WMI verwenden, können Sie sollen in der Lage sein, es zu tun, über die Win32_UserAccount Klasse denke ich. Es hat eine Name Eigenschaft und eine SID Eigenschaft.

oder die Win32_Group Klasse für die Gruppen.

Hier ist ein Artikel zu einem entfernten PC verbinden WMI verwenden, die C # -Code hat: How To: eine Verbindung mit einem Remotecomputer

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top