Konvertieren SID zu Benutzername / Gruppen?
-
10-10-2019 - |
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.
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