Pregunta

Estoy bucle a través de un directorio de red y tratando de dar salida a los nombres de usuario / grupo (permisos) asociados con cada archivo / carpeta. Me estoy poniendo la espalda del SID, pero quiero los nombres como "group_test" y no "S-1-5-32-544". Aquí está mi código -

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));
                    }  }

consigo SID en el código anterior, pero en el bucle foreach, si uso este lugar -

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

consigo esta excepción - Some or all identity references could not be translated.

Parece que el método Traducir no funciona en recursos compartidos remotos. ¿Cómo puedo recuperar los nombres reales de la SID? El servidor remoto no tiene LDAP.

Gracias.

¿Fue útil?

Solución

El problema es que usted está tratando de resolver un SID que es a una máquina remota local. Como la respuesta a esta pregunta estados:

El objeto es SecurityReference Traducir método funciona en SID no locales, pero sólo para las cuentas de dominio ...

enlace proporciona un ejemplo para resolver de forma remota un SID mediante WMI que es probablemente el mejor método para llevar a cabo su tarea.

Otros consejos

Si usted puede utilizar WMI debe ser capaz de hacerlo a través de la clase Win32_UserAccount creo. Tiene una propiedad Name y una propiedad SID.

O la clase Win32_Group para los grupos.

He aquí un artículo para la conexión a un PC remoto a través de WMI que tiene el código C #: Cómo conectarse a un ordenador remoto

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top